2

これが私のAsyncTask内で使用しているコードです

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(url);    
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");

HttpResponse response = httpClient.execute(request);

HttpEntity responseEntity = response.getEntity();

char[] buffer = new char[(int)responseEntity.getContentLength()];
    InputStream stream = responseEntity.getContent();
    InputStreamReader reader = new InputStreamReader(stream);
    reader.read(buffer);
    stream.close();

    result = new String(buffer);
    return result;

これは文字列の結果を返し、 onPostExecute メソッドでその入力文字列を解析しようとします。

JSONObject vehicle = new JSONObject(new String(result));
makeEdit.setText(vehicle.getString("make"));
plateEdit.setText(vehicle.getString("plate"));
modelEdit.setText(vehicle.getString("model"));
yearEdit.setText(vehicle.getString("year"));

makeEdit.setText に達するとすぐに、エラーがスローされます - make の値がありません。私はまだAndroidに非常に慣れていないので、明らかなエラーがあった場合は殺害の脅迫を送らないでください. 入力テキストは次の JSON 文字列です。

{"GetJSONObjectResult":{"make":"Ford","model":"Focus","plate":"XXO123GP","year":2006}}
4

2 に答える 2

9

No value for x errorJSON を扱う場合、message はかなり一般的です。これは通常、見落とされたコードが原因でした。

通常、JSON をドンするときは、人間が読める構造を最初に見ようとします。そのために、私は通常JSONViewerを使用します。

あなたの場合、構造は次のようになります。

ここに画像の説明を入力

makeと呼ばれる別のオブジェクト内にあることがわかりますGetJSONObjectResult。したがって、それを取得するには、最初にコンテナ オブジェクトを取得する必要があります。

JSONObject vehicle = ((JSONObject)new JSONObject(result)).getJSONObject("GetJSONObjectResult");
//a more easy to read
JSONObject container = new JSONObject(result);
JSONObject vehicle = container.getJSONObject("GetJSONObjectResult");

最後にオブジェクトを使用して取得しますmake:

makeEdit.setText(vehicle.getString("make"));
plateEdit.setText(vehicle.getString("plate"));
modelEdit.setText(vehicle.getString("model"));
yearEdit.setText(vehicle.getString("year"));
于 2012-06-08T10:25:46.623 に答える
4

JSON オブジェクトには、それ自体が JSONObject が含まれています。データにアクセスするには、次のようにする必要があります。

vehicle.getJSONObject("GetJSONObjectResult").getString("make");
于 2012-06-08T10:26:45.750 に答える