android中的JSON解析:x错误没有值

android中的JSON解析:x错误没有值,android,json,parsing,Android,Json,Parsing,下面是我在异步任务中使用的代码 DefaultHttpClient httpClient = new DefaultHttpClient(); HttpGet request = new HttpGet(url); request.setHeader("Accept", "application/json"); request.setHeader("Content-type", "application/json"); HttpResponse response = httpClien

下面是我在异步任务中使用的代码

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}}

处理JSON时,
无x错误值
消息非常常见。这通常是由于忽略了代码

通常,当使用JSON时,我会首先尝试查看人类可读的结构。为此,我通常使用

在您的案例中,结构如下所示:

vehicle.getJSONObject("GetJSONObjectResult").getString("make");

您可以看到,
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");
最后使用对象获取
生成

makeEdit.setText(vehicle.getString("make"));
plateEdit.setText(vehicle.getString("plate"));
modelEdit.setText(vehicle.getString("model"));
yearEdit.setText(vehicle.getString("year"));

JSON对象本身包含一个JSONObject。要访问您的数据,您必须执行以下操作:

vehicle.getJSONObject("GetJSONObjectResult").getString("make");

+1快速一个…但有查询,为什么JSONObject(新字符串(结果));为什么不是JSONObject(结果)@德雷辛你是对的。我只是复制粘贴他的代码并添加我的修复程序。我不知道车辆数据被包装在一个容器中x_x感谢您的快速回复。首先获取
GetJSONObjectResult
,然后是内部值。感谢Jeje,我测试了此代码,此代码也工作正常。我会+1你的答案,但我的代表太低了:(