2

我正在开发 android 应用程序,我需要用数据解析我的 json 对象。您如何看到我创建了 JSONParser 类并尝试使用 asynctask 但出现了问题,我不明白问题出在哪里。每次我使用它时,resultJSON 都是空的。希望您能给我一个建议!

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();
        }
    }
}
}
4

3 回答 3

1


为什么不在JSONArray json = new JSONArray(resultJSON);async task 的 post execute 方法上执行此操作。

而且我不会建议 varevarao 方式,因为它会增加一个线程的负担。

于 2012-12-28T19:56:54.847 回答
0

问题已解决。这是一个糟糕的解决方法,但它有效。添加这一行

while(json==null) {}

调用execute方法后。

于 2012-12-29T14:56:44.347 回答
0

您应该使用 AsyncTask 类的get() 方法来检索任务的结果。它等待任务完成并获得结果(这意味着最好将它包含在带有进度对话框的单独线程中,或者只是一个后台线程)。

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;
}
于 2012-12-28T19:50:45.027 回答