无法从JSON对象(Android)获取数据

时间:2017-10-09 03:19:36

标签: android json android-volley

我无法从网址解析JSON响应(" http://www.telekino.com.ar/cupones/control/1267/1027027/84.json")

{"kino":{"ganador":false,"diferencia":""},"rekino":{"ganador":false,"diferencia":""},"carton_formateado":"1.027.027","cupon_numeros":"","premio_extra":false,"cupon_caducidad":"22\/08\/2016","cupon_erroneo":true}

我使用JSONViewr来理解树,并且非常简单,但是我无法获得布尔值,字符串等。我总是收到空结果

JsonURL= "http://www.telekino.com.ar/cupones/control/1267/1027027/84.json"



            JsonObjectRequest jsObjRequest = new JsonObjectRequest
                    (Request.Method.GET, JsonURL, null, new Response.Listener<JSONObject>() {

                        @Override
                        public void onResponse(JSONObject response) {





                                try {
                                    JSONObject object= response.getJSONObject("object");

                                    algoerroneo = object.getBoolean("algo_erroneo");
                                    JSONObject kino = object.getJSONObject("kino");
                                    kinoganador = kino.getBoolean("ganador");
                                    JSONObject data = kino.getJSONObject("data");
                                    JSONObject Categoria = data.getJSONObject("Categoria");
                                    Smonto = Categoria.getString("monto");
                                    JSONObject Ganador = data.getJSONObject("Ganador");
                                    Saciertos = Ganador.getString("aciertos");
                                    JSONObject rekino = object.getJSONObject("rekino");
                                    rekinoganador = rekino.getBoolean("ganador");
                                    objetoslist = object.toString();





                                } catch (JSONException e1) {
                                    e1.printStackTrace();

                                }








                            data=String.valueOf(algoerroneo)+" "+String.valueOf(kinoganador)+" "+String.valueOf(rekinoganador)+ "\n"+objetoslist;
                            results.setText(data);

                        }
                    }, new Response.ErrorListener() {

                        @Override
                        public void onErrorResponse(VolleyError error) {
                            // TODO Auto-generated method stub
                            text8.setText("shit2");
                        }
                    });

                    // Access the RequestQueue through your singleton class.
                    MySingleton.getInstance(MainActivity.this).addToRequestQueue(jsObjRequest);

4 个答案:

答案 0 :(得分:2)

您可以从JSON创建类(使用http://www.jsonschema2pojo.org/):

结果:

    -----------------------------------com.example.Example.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example {

@SerializedName("kino")
@Expose
private Kino kino;
@SerializedName("rekino")
@Expose
private Rekino rekino;
@SerializedName("carton_formateado")
@Expose
private String cartonFormateado;
@SerializedName("cupon_numeros")
@Expose
private String cuponNumeros;
@SerializedName("premio_extra")
@Expose
private Boolean premioExtra;
@SerializedName("cupon_caducidad")
@Expose
private String cuponCaducidad;
@SerializedName("cupon_erroneo")
@Expose
private Boolean cuponErroneo;

public Kino getKino() {
return kino;
}

public void setKino(Kino kino) {
this.kino = kino;
}

public Rekino getRekino() {
return rekino;
}

public void setRekino(Rekino rekino) {
this.rekino = rekino;
}

public String getCartonFormateado() {
return cartonFormateado;
}

public void setCartonFormateado(String cartonFormateado) {
this.cartonFormateado = cartonFormateado;
}

public String getCuponNumeros() {
return cuponNumeros;
}

public void setCuponNumeros(String cuponNumeros) {
this.cuponNumeros = cuponNumeros;
}

public Boolean getPremioExtra() {
return premioExtra;
}

public void setPremioExtra(Boolean premioExtra) {
this.premioExtra = premioExtra;
}

public String getCuponCaducidad() {
return cuponCaducidad;
}

public void setCuponCaducidad(String cuponCaducidad) {
this.cuponCaducidad = cuponCaducidad;
}

public Boolean getCuponErroneo() {
return cuponErroneo;
}

public void setCuponErroneo(Boolean cuponErroneo) {
this.cuponErroneo = cuponErroneo;
}

}
-----------------------------------com.example.Kino.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Kino {

@SerializedName("ganador")
@Expose
private Boolean ganador;
@SerializedName("diferencia")
@Expose
private String diferencia;

public Boolean getGanador() {
return ganador;
}

public void setGanador(Boolean ganador) {
this.ganador = ganador;
}

public String getDiferencia() {
return diferencia;
}

public void setDiferencia(String diferencia) {
this.diferencia = diferencia;
}

}
-----------------------------------com.example.Rekino.java-----------------------------------

package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Rekino {

@SerializedName("ganador")
@Expose
private Boolean ganador;
@SerializedName("diferencia")
@Expose
private String diferencia;

public Boolean getGanador() {
return ganador;
}

public void setGanador(Boolean ganador) {
this.ganador = ganador;
}

public String getDiferencia() {
return diferencia;
}

public void setDiferencia(String diferencia) {
this.diferencia = diferencia;
}

}

然后

JsonURL =“http://www.telekino.com.ar/cupones/control/1267/1027027/84.json

    JsonObjectRequest jsObjRequest = new JsonObjectRequest
            (Request.Method.GET, JsonURL, null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {





                    try {
                       // JSONObject object= response.getJSONObject("object");


                        JSONObject kinoObject = response.getJSONObject("kino");
                        JSONObject rekinoObject = response.getJSONObject("rekino");


                        Gson gson = new Gson();

                        Kino  kino = gson.fromJson(kinoObject.toString(), Kino.class);
                        Rekino  rekino = gson.fromJson(rekinoObject.toString(), Rekino.class);
                        Example example = gson.fromJson(response.toString(), Example.class);



                    } catch (JSONException e1) {
                        e1.printStackTrace();

                    }








                    data=String.valueOf(algoerroneo)+" "+String.valueOf(kinoganador)+" "+String.valueOf(rekinoganador)+ "\n"+objetoslist;
                    results.setText(data);

                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    // TODO Auto-generated method stub
                    text8.setText("shit2");
                }
            });

    // Access the RequestQueue through your singleton class.
    MySingleton.getInstance(MainActivity.this).addToRequestQueue(jsObjRequest);

我希望它能帮到你解决问题!

否则,您可以使用Retrofit,它很容易与JSON和HTTP一起使用!

答案 1 :(得分:1)

为避免与键和对象相关的错误,您可以使用POJO和gson 首先,根据此site

创建您的回复的POJO

然后使用gson库

使用此对象转换您的响应
Gson gson = new Gson();
YourPojoClass yourPojoClassObject = gson.fromJson(webresponse, YourPojoClass.class);

现在,您可以从yourPojoClassObject轻松获取值

答案 2 :(得分:1)

问题出在您获取对象的第一行 JSONObject object = response.getJSONObject(&#34; object&#34;);

这会尝试通过名称&#34; object&#34;来查找JSONObject,但是,您的JSON中没有任何内容。所以,使用JSONObject&#34;响应&#34;用于引用对象,字符串或布尔值的参数。

例如:

JSONObject kino = response.getJSONObject("kino");

答案 3 :(得分:1)

下载RoboPOJOGenerator插件并安装它。它会自动将JSON字符串转换为java POJO类。

https://github.com/robohorse/RoboPOJOGenerator

使用GSON库使用下面的代码存储和检索POJO类中的值。

Gson gson = new Gson();
Classname objectname = gson.fromJson(jsonString,Classname.class);