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 errormessage 在处理 JSON 时很常见。这通常是由于被忽略的代码造成的。

通常,当 dong 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 回答