从JSONArray获取JSONObject?

时间:2015-02-22 02:13:49

标签: android json jsonobject

我尝试从JSONArray获取JSONObject。当我做Log.i时显示JSONArray的值并拥有我想要的JSONObject。问题是当我尝试获取此JSONObject时,抛出异常show:No value for Local or No value for TipoLocal。 Local和TipoLocal是JSONObject到JSONArray。

我怎么能这样做?

JSON

{"Retorno":[
{"Local":{"id":"1","nome":"Vovo Landa","telefone":"3333333","celular":"44444","endereco":"Rua 46 a","numero":"025","bairro":"bairro","email":"email"}},
{"TipoLocal":{"id":"1","tipo":"Pizzaria"}}
]}

的JSONObject

try{
   Gson gson = new Gson();
   JSONArray retorno = obj.getJSONArray("Retorno");

   if(retorno.length() > 0){
         for(int x = 0; x < retorno.length(); x++){
              JSONObject jsoObject = retorno.getJSONObject(x);
              JSONObject jsoLocal = jsoObject.getJSONObject("Local");
              JSONObject jsoTipoLocal = jsoObject.getJSONObject("TipoLocal");
         }
    }
}catch (JSONException e) {
      Log.e("JSONException->:", "getLocais in LocalDAO: " + e.getLocalizedMessage());
}

2 个答案:

答案 0 :(得分:1)

更改此部分:

for(int x = 0; x < retorno.length(); x++){
    JSONObject jsoObject = retorno.getJSONObject(x);
    JSONObject jsoLocal = jsoObject.getJSONObject("Local");
    JSONObject jsoTipoLocal =jsoObject.getJSONObject("TipoLocal");
}

for(int x = 0; x < retorno.length(); x++){
    JSONObject jsoObject = retorno.getJSONObject(x);

    if(jsoObject.has("Local")) {      
        JSONObject jsoLocal = jsoObject.getJSONObject("Local");
    }
    if(jsoObject.has("TipoLocal")) {
        JSONObject jsoTipoLocal = jsoObject.getJSONObject("TipoLocal");
    }
}

答案 1 :(得分:0)

当没有发现任何值错误时,他们可能会跟随原因

1)如果您通过Internet连接,请检查您的网络连接是否正常工作。

2)在AndroidManifest.xml文件中声明Internet权限。

3)检查您是否正在获取正确的元素,如果您正在调用result.getJsonObject(),那么请确保您尝试获取JsonObject而不是JsonArray。

4)如果你在Android中获得No value find,那么检查你是否正在从android端和服务器端拼写正确的单词 例如,如果您在服务器中声明了“城市”,那么请确保在Android中,否则它应该是“城市”而不是“城市”。

5)如果要在JsonArray上添加JsonObject,请检查JsonObject是否已添加到服务器端的JsonArray上。

6)检查LogCat中的实际异常,它会告诉你为什么没有得到值

希望这会对你有所帮助