我正在尝试从我的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");}
}
抱歉我的英语不好。希望你理解:)
答案 0 :(得分:1)
猜猜,因为你没有显示足够的代码。
最有可能在收到结果之前检查结果。 AsyncTask
与主线程异步运行,您必须等到它完成才能使用结果。
事实上,这就是为什么有onPostExecute
方法的原因。这是处理结果的正确位置。
答案 1 :(得分:0)
你需要初始化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;
}
试试这个