我正在研究android应用程序,我需要用数据解析我的json对象。你怎么看我创建JSONParser类并尝试使用asynctask但是有一些错误,我无法理解问题出在哪里。每次我使用它时,resultJSON为null。希望你能给我一个建议!
public class JSONParser {
private String resultJSON;
public JSONArray getJSON(String url) throws JSONException {
Parser parser = new Parser();
parser.execute(url);
return json;
}
private class Parser extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
for (String url : urls) {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
resultJSON = builder.toString();
} else {
Log.e(JSONParser.class.toString(), "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return resultJSON;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
json = new JSONArray(result);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
为什么不JSONArray json = new JSONArray(resultJSON);
在异步任务的后执行方法上执行此操作。
我不会建议varevarao方式,因为它会给一个线程带来额外的负担。
答案 1 :(得分:0)
您应该使用AsyncTask类的get() method来检索任务的结果。它等待任务完成并获得结果(这意味着如果将它包含在具有进度对话框或仅后台线程的单独线程中,它将是最好的。)
public JSONArray getJSON(String url) throws JSONException {
Parser parser = new Parser();
parser.execute(url);
resultJSON = parser.get(); // Probably put this in a Thread to avoid spending too much time waiting for a result on the main thread
JSONArray json = new JSONArray(resultJSON);
return json;
}
答案 2 :(得分:0)
问题是解决的。这是一个糟糕的解决方法,但它的工作原理。添加此行
while(json==null) {}
调用execute方法后。