JSON解析Android中:对于x错误没有价值 [英] JSON parsing in android: No value for x error

查看:99
本文介绍了JSON解析Android中:对于x错误没有价值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是code我用我的AsyncTask

里面

  DefaultHttpClient的HttpClient =新DefaultHttpClient();
HTTPGET请求=新HTTPGET(URL);
request.setHeader(接受,应用/ JSON);
request.setHeader(内容类型,应用/ JSON);HTT presponse响应= httpClient.execute(请求);HttpEntity responseEntity = response.getEntity();的char []缓冲区=新的char [(INT)responseEntity.getContentLength()];
    InputStream的流= responseEntity.getContent();
    InputStreamReader的读者=新的InputStreamReader(流);
    reader.read(缓冲液);
    stream.close();    结果=新的String(缓冲);
    返回结果;

这会返回一个字符串结果,在我onPostExecute方法我尝试解析输入字符串:

 的JSONObject车=新的JSONObject(新的字符串(结果));
makeEdit.setText(vehicle.getString(使));
plateEdit.setText(vehicle.getString(板块));
modelEdit.setText(vehicle.getString(模特));
yearEdit.setText(vehicle.getString(年));

一旦它到达makeEdit.setText它抛出一个错误 - 不作任何价值。我还是很新的到Android,所以如果有一些明显的错误,不发送死亡威胁。输入文本是下面的JSON字符串:

  {GetJSONObjectResult:{作:福特,模式:焦点访谈,盘子:XXO123GP,年:2006}}


解决方案

对于x错误没有价值使用JSON打交道时的消息是pretty常见。这通常导致被忽视code。

通常情况下,当洞JSON,我试图首先看到的人类可读的结构。对于这一点,我通常使用 JSONViewer

在您的情况下,结构是这样的:

您看到制作是另一个名为对象中 GetJSONObjectResult 。因此,为了得到它,你首先必须先得到容器对象:

 的JSONObject车辆=((JSONObject的)新的JSONObject(结果))getJSONObject(GetJSONObjectResult);
//更容易阅读
JSONObject的集装箱=新的JSONObject(结果);
JSONObject的车辆= container.getJSONObject(GetJSONObjectResult);

和最后使用对象来获取制作

  makeEdit.setText(vehicle.getString(使));
plateEdit.setText(vehicle.getString(板块));
modelEdit.setText(vehicle.getString(模特));
yearEdit.setText(vehicle.getString(年));

Here is the code I'm using inside my 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;

This returns a string result and in my onPostExecute method I try to parse that input string:

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"));

As soon as it reaches makeEdit.setText it throws an error - no value for make. I'm still very new to android, so don't send death threats if there was some obvious error. The input text is the following JSON string:

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

解决方案

No value for x error message is pretty common when dealing with JSON. This usually resulted by overlooked code.

usually, when dong JSON, I try to see the human readable structure first. For that, I usually use JSONViewer.

In your case, the structure is something like this:

You see that make is within another object called GetJSONObjectResult. Therefore, to get it, you must first get the container object first:

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

and finally use the object to get make:

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

这篇关于JSON解析Android中:对于x错误没有价值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆