我正在尝试使用 php 和 JSON 文件将 MYSQL 与 android 应用程序连接,目前我面临的问题是 JSONParser 类总是返回 null,我不知道为什么,因为我可以查看我的 JSON 文件并且它是有效的
而且我的代码中有两个异常(exception),第一个是:
12-08 09:17:43.486 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from GradienCache
12-08 09:17:43.498 29666-29666/alharbi.astrong texttheer.gym_managment_system E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384
12-08 09:17:43.518 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
12-08 09:17:43.522 29666-29666/alharbi.atheer.gym_managment_system E/OpenGLRenderer: MAX_TEXTURE_SIZE: 16384
第二个是:
12-08 09:17:46.526 29666-29740/alharbi.atheer.gym_managment_system E/Buffer Error: Error converting result java.lang.NullPointerException: lock == null
12-08 09:17:46.526 29666-29740/alharbi.atheer.gym_managment_system E/JSON Parser: Error parsing data org.json.JSONException: End of input at character 0 of
这是包含问题的类
public class ViewInfo extends AppCompatActivity {
JSONParser jsonParser;
ProgressDialog progressDialog;
int value;
String[] names,emails,levels,ids, weights,hieghts,genders,bds,addresses,ages,phones;
ListView listView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_info);
jsonParser=new JSONParser();
listView2=(ListView)findViewById(R.id.listView2);
new DisplayViewInfo().execute();
}
class DisplayViewInfo extends AsyncTask<String,String,String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog=new ProgressDialog(ViewInfo.this);
progressDialog.setTitle("Wait...");
progressDialog.show();
}
@Override
protected String doInBackground(String... strings) {
List<NameValuePair> list= new ArrayList<NameValuePair>();
// HashMap<String,String> list = new HashMap<>();
// jsonObject=jsonParser.makeHttpRequest("http://192.168.56.1/myapp/ViewInfo.php","POST",list);
JSONObject jsonObject=jsonParser.makeHttpRequest("http://192.168.56.1/myapp/ViewInfo.php", "POST", list);
try{
if(jsonObject!=null && !jsonObject.isNull("value")){
value=jsonObject.getInt("value");
JSONArray jsonArray=jsonObject.getJSONArray("Customers");
names=new String[jsonArray.length()];
emails=new String[jsonArray.length()];
phones=new String[jsonArray.length()];
ids=new String[jsonArray.length()];
weights=new String[jsonArray.length()];
hieghts=new String[jsonArray.length()];
genders=new String[jsonArray.length()];
levels=new String[jsonArray.length()];
ages=new String[jsonArray.length()];
addresses=new String[jsonArray.length()];
bds=new String[jsonArray.length()];
for(int i=0;i<jsonArray.length();i++){
JSONObject objcet=jsonArray.getJSONObject(i);
ids[i]=objcet.getString("Customer_ID");
names[i]=objcet.getString("Name");
emails[i]=objcet.getString("Email");
phones[i]=objcet.getString("Phone_number");
weights[i]=objcet.getString("Weight");
hieghts[i]=objcet.getString("Height");
genders[i]=objcet.getString("Gender");
levels[i]=objcet.getString("Level");
ages[i]=objcet.getString("age");
addresses[i]=objcet.getString("address");
bds[i]=objcet.getString("Date_of_birth");
}
}else{
value=0;
}
}catch (Exception e){
Log.d("ERROR", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(value==1){
Toast.makeText(getApplicationContext(), "Done...", Toast.LENGTH_LONG).show();
ArrayAdapter<String> adapter=new ArrayAdapter<String>(ViewInfo.this,android.R.layout.simple_list_item_1,android.R.id.text1,names);
listView2.setAdapter(adapter);
}else if(value==0)
Toast.makeText(getApplicationContext(),"Error...",Toast.LENGTH_LONG).show();
else Toast.makeText(getApplicationContext(),"OUT...",Toast.LENGTH_LONG).show();
progressDialog.dismiss();
}
}
}
这是我的 JSON 解析器:
公共(public)类 JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
// Making HTTP request
try {
// check for request method
if(method.equals("POST")){
// request method is POST
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}else if(method.equals("GET")){
// request method is GET
DefaultHttpClient httpClient = new DefaultHttpClient();
String paramString = URLEncodedUtils.format(params, "utf-8");
url += "?" + paramString;
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
}
} catch (UnsupportedEncodingException e) {
//e.printStackTrace();
} catch (ClientProtocolException e) {
// e.printStackTrace();
} catch (IOException e) {
//e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
有人可以帮我吗?由于这些错误,我已经陷入困境好几天了
最佳答案
从该 JSON 错误的外观来看,您似乎没有收到有效的响应,并且您的响应字符串只是空的。发生这种情况时,我通常会检查 Web 服务调用的 html 响应代码以及构建后的实际字符串。这有助于确定 Web 服务是否有问题,或者您对 Web 服务的调用是否有问题。
我应该提到的另一件事是,您正在为网络调用使用已弃用的代码。 apache http 代码已从 Android 框架中删除,因此您应该使用 HttpURLConnection
来进行 Web 服务调用。
我今天心情很好,而且感觉很有帮助,所以我将向您提供用于获取此 JSON 响应的代码:)
//The JSON we will get back as a response from the server
JSONObject jsonResponse = null;
//Http connections and data streams
URL url;
HttpURLConnection httpURLConnection = null;
OutputStreamWriter outputStreamWriter = null;
try {
//open connection to the server
url = new URL("your_url_to_web_service");
httpURLConnection = (HttpURLConnection) url.openConnection();
//set request properties
httpURLConnection.setDoOutput(true); //defaults request method to POST
httpURLConnection.setDoInput(true); //allow input to this HttpURLConnection
httpURLConnection.setRequestProperty("Content-Type", "application/json"); //header params
httpURLConnection.setRequestProperty("Accept", "application/json"); //header params
httpURLConnection.setFixedLengthStreamingMode(jsonToSend.toString().getBytes().length); //header param "content-length"
//open output stream and POST our JSON data to server
outputStreamWriter = new OutputStreamWriter(httpURLConnection.getOutputStream());
outputStreamWriter.write(jsonToSend.toString());
outputStreamWriter.flush(); //flush the stream when we're finished writing to make sure all bytes get to their destination
//prepare input buffer and get the http response from server
StringBuilder stringBuilder = new StringBuilder();
int responseCode = httpURLConnection.getResponseCode();
//Check to make sure we got a valid status response from the server,
//then get the server JSON response if we did.
if(responseCode == HttpURLConnection.HTTP_OK) {
//read in each line of the response to the input buffer
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"utf-8"));
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
bufferedReader.close(); //close out the input stream
try {
//Copy the JSON response to a local JSONObject
jsonResponse = new JSONObject(stringBuilder.toString());
} catch (JSONException je) {
je.printStackTrace();
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
if(httpURLConnection != null) {
httpURLConnection.disconnect(); //close out our http connection
}
if(outputStreamWriter != null) {
try {
outputStreamWriter.close(); //close our output stream
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
//Return the JSON response from the server.
return jsonResponse;
关于php - Android JSON解析返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34160066/