2

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

3 に答える 3

1


JSONArray json = new JSONArray(resultJSON);非同期タスクの実行後メソッドでこれを実行して みませんか。

そして、私はvarevaraoの方法を提案しません。それは、1つのスレッドの余分な負担を生み出すからです。

于 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 に答える