我正在尝试从我的Web服务器解析JSON。获取数据不是问题,但是当我尝试创建JSONObject
时,它总是返回null
。
我的JSON:
{"apikey":"c34750f19843vo45239o","error":false}
和我的java:
private class GetJSON extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
JSONResult = null;
HttpHandler sh = new HttpHandler();
sh.HTTPMethod = DefaultMethod;
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(ApiUrl+tmpUrl);
System.out.println("Response from "+ApiUrl+tmpUrl+": " + jsonStr);
if (jsonStr != null) {
try {
JSONResult = new JSONObject(jsonStr);
} catch (final JSONException e) {
System.out.println("Json parsing error: " + e.getMessage());
}
} else {
System.out.println("Couldn't get json from server.");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
clearRequest();
}
}
我尝试过使用jsonStr.toString()
,但结果相同。我也可以在Java中记录我的JSON字符串,但没有解析。
这是返回null
的地方:
if(JSONResult != null && JSONResult.has("apikey")) {
ApiKey = JSONResult.getString("apikey");
System.out.println("Successfully got ApiKey: "+ApiKey);
}else{
if(JSONResult == null){System.out.println("Is Null");}
}
对不起,我的英语不好。希望您理解:(
只是猜测,因为您没有显示足够的代码。
很可能在收到结果之前检查结果。AsyncTask
不同步到您的主线程,您必须等到完成后才能使用结果。
实际上,这就是为什么有onPostExecute
方法的原因。这是处理结果的正确位置。
您需要初始化jsonobject jsonresult = null;在您的Doinbackground方法
中 @Override
protected Void doInBackground(Void... arg0) {
JSONObject JSONResult = null;
HttpHandler sh = new HttpHandler();
sh.HTTPMethod = DefaultMethod;
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(ApiUrl+tmpUrl);
System.out.println("Response from "+ApiUrl+tmpUrl+": " + jsonStr);
if (jsonStr != null) {
try {
JSONResult = new JSONObject(jsonStr);
} catch (final JSONException e) {
System.out.println("Json parsing error: " + e.getMessage());
}
} else {
System.out.println("Couldn't get json from server.");
}
return null;
}
尝试此