捕获JSONException

时间:2013-04-15 18:21:50

标签: java android json

我在这段代码中遇到了JSON异常:

JSONObject jObject = new JSONObject(JSONString);
        pontosUsuario.setIdUsuario(jObject.getInt("idUsuario"));
        //Toast.makeText(this, pontosUsuario.idUsuario, Toast.LENGTH_LONG).show();
        pontosUsuario.setNomeUsuario(jObject.getString("nomeUsuario"));
        pontosUsuario.setCPF(jObject.getString("CPF"));
        pontosUsuario.setEmail(jObject.getString("email"));
        pontosUsuario.setSigla(jObject.getString("sigla"));
        pontosUsuario.setSenha(jObject.getString("senha"));
        pontosUsuario.setInstuicao(jObject.getString("instituicao"));

        JSONArray jArr = new JSONArray(jObject.getString("listaDePontos"));

        for (int i = 0; i < jArr.length(); i++) {
            JSONObject temp = jArr.getJSONObject(i);
            Ponto ponto = new Ponto();
            ponto.setIdPonto(temp.getString("idPonto"));
            ponto.setPontoNome(temp.getString("pontoNome"));
            String data = temp.getString("dtCampo");
            data = data.substring(0, 10);
            //dtCampo = temp.getString("dtCampo");
            try {
                ponto.setDtCampo(new SimpleDateFormat(data, Locale.ENGLISH).parse(data));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            ponto.setProjeto(temp.getInt("projeto"));
            ponto.setUTMEste(temp.getDouble("UTMEste"));
            ponto.setUTMNorte(temp.getDouble("UTMNorte"));
            ponto.setUTMFuso(temp.getInt("UTMFuso"));
            ponto.setUTMHemisferio(temp.getString("UTMHemisferio"));
            ponto.setLatDec(temp.getDouble("latDec"));
            ponto.setLongDec(temp.getDouble("longDec"));
            ponto.setAltitude(temp.getInt("altitude"));
            ponto.setDescPonto(temp.getString("descPonto"));
            ponto.setComplement(temp.getString("complement"));
            //ponto.getAnaliseCampo();
            AnaliseCampo analiseCampo = new AnaliseCampo();
            //JSONObject anObj = jObject.getJSONObject("analiseCampo");


            JSONObject anObj = jObject.getJSONObject("analiseCampo");
            //AnaliseCampo analiseCampo = new AnaliseCampo();
            analiseCampo.setNomeEstrutura(anObj.getString("nomeEstrutura"));
            analiseCampo.setIdAnCampo(anObj.getString("idAnCampo"));
            analiseCampo.setDescEstrutura(anObj.getString("descEstrutura"));
            analiseCampo.setEhBrunton(anObj.getBoolean("ehBrunton"));
            ponto.setAnaliseCampo(analiseCampo);
            //ponto.setAnaliseCampo(temp.get("analiseCampo");

异常是:detailMessage“analiseCampo没有值”(id = 830007838576)

这是Ponto.class:

public class Ponto {

private String idPonto;
private String pontoNome;
private Date dtCampo;
private int projeto;
private double UTMEste;
private double UTMNorte;
private int UTMFuso;
private String UTMHemisferio;
private double latDec;
private double longDec;
private int altitude;
private String descPonto;
private String complement;
private AnaliseCampo analiseCampo;
private ArrayList<Arquivo> arquivos;
private ArrayList<PontoUnGeologica> idUnidadeGeologica;       

public String getIdPonto() {
    return idPonto;
}

public void setIdPonto(String idPonto) {
    this.idPonto = idPonto;
}

public String getPontoNome() {
    return pontoNome;
}

public void setPontoNome(String pontoNome) {
    this.pontoNome = pontoNome;
}

public Date getDtCampo() {
    return dtCampo;
}

public void setDtCampo(Date dtCampo) {
    this.dtCampo = dtCampo;
}

public int getProjeto() {
    return projeto;
}

public void setProjeto(int projeto) {
    this.projeto = projeto;
}

public double getUTMEste() {
    return UTMEste;
}

public void setUTMEste(double uTMEste) {
    UTMEste = uTMEste;
}

public double getUTMNorte() {
    return UTMNorte;
}

public void setUTMNorte(double uTMNorte) {
    UTMNorte = uTMNorte;
}

public int getUTMFuso() {
    return UTMFuso;
}

public void setUTMFuso(int uTMFuso) {
    UTMFuso = uTMFuso;
}

public String getUTMHemisferio() {
    return UTMHemisferio;
}

public void setUTMHemisferio(String utmHemisferio) {
    UTMHemisferio = utmHemisferio;
}

public double getLatDec() {
    return latDec;
}

public void setLatDec(double latDec) {
    this.latDec = latDec;
}

public double getLongDec() {
    return longDec;
}

public void setLongDec(double longDec) {
    this.longDec = longDec;
}

public int getAltitude() {
    return altitude;
}

public void setAltitude(int altitude) {
    this.altitude = altitude;
}

public String getDescPonto() {
    return descPonto;
}

public void setDescPonto(String descPonto) {
    this.descPonto = descPonto;
}

public String getComplement() {
    return complement;
}

public void setComplement(String complement) {
    this.complement = complement;
}

public AnaliseCampo getAnaliseCampo() {
    return analiseCampo;
}

public void setAnaliseCampo(AnaliseCampo analiseCampo) {
    this.analiseCampo = analiseCampo;
}

public ArrayList<Arquivo> getArquivos() {
    return arquivos;
}

public void setArquivos(ArrayList<Arquivo> arquivos) {
    this.arquivos = arquivos;
}

public ArrayList<PontoUnGeologica> getIdUnigadeGeologica() {
    return idUnidadeGeologica;
}

public void setIdUnigadeGeologica(ArrayList<PontoUnGeologica> idUnigadeGeologica) {
    this.idUnidadeGeologica = idUnigadeGeologica;
}

public Ponto()
{
    arquivos = new ArrayList<Arquivo>();
    idUnidadeGeologica = new ArrayList<PontoUnGeologica>();
    analiseCampo = new AnaliseCampo();
}

}

这是AnaliseCampo.class

public class AnaliseCampo {

public String nomeEstrutura;
public String idAnCampo;
public String descEstrutura;
public boolean ehBrunton;
public ArrayList<AnaliseEstrutural> analiseEstruturais;


public String getNomeEstrutura() {
    return nomeEstrutura;
}


public void setNomeEstrutura(String nomeEstrutura) {
    this.nomeEstrutura = nomeEstrutura;
}


public String getIdAnCampo() {
    return idAnCampo;
}


public void setIdAnCampo(String idAnCampo) {
    this.idAnCampo = idAnCampo;
}


public String getDescEstrutura() {
    return descEstrutura;
}


public void setDescEstrutura(String descEstrutura) {
    this.descEstrutura = descEstrutura;
}


public boolean isEhBrunton() {
    return ehBrunton;
}


public void setEhBrunton(boolean ehBrunton) {
    this.ehBrunton = ehBrunton;
}


public ArrayList<AnaliseEstrutural> getAnaliseEstruturais() {
    return analiseEstruturais;
}


public void setAnaliseEstruturais(
        ArrayList<AnaliseEstrutural> analiseEstruturais) {
    this.analiseEstruturais = analiseEstruturais;
}


public AnaliseCampo()
{
    analiseEstruturais = new ArrayList<AnaliseEstrutural>();
}

}

这是JSON:

"idUsuario": 20,
"nomeUsuario": "Barbara Trzaskos",
"CPF": "978824029-15",
"email": "barbaratrzaskos@ufpr.br",
"sigla": "BTR",
"senha": "safira",
"instuicao": "Universidade Federal do Paraná",
"listaDePontos": [
  {
    "idPonto": "BTR0001",
    "pontoNome": "BTR-0001",
    "dtCampo": "2011-04-29T00:00:00",
    "projeto": 2,
    "UTMEste": 547276.0,
    "UTMNorte": 7285137.0,
    "UTMFuso": 22,
    "UTMHemisferio": "S",
    "latDec": -24.5469,
    "longDec": -50.5332,
    "altitude": 0,
    "descPonto": "Arenito mal selecionado. Apresenta fina banda de deformação, como um suave ressalto no relevo e coloração mais clara. Exibe plano subvertical com padrão anastomosado e cinemática aparente sinistral",
    "complement": "Coleta de amostra orientada.",
    "analiseCampo": {
      "nomeEstrutura": "-",
      "idAnCampo": "BTR0001",
      "descEstrutura": "",
      "ehBrunton": true,
      "analiseEstruturais": [
        {
          "idEstrutura": "BTR0001001",
          "ordem": 0,
          "tipo": "Plano",
          "codigo": "F",
          "brunton": "N42W/86SW",
          "clar": "228/86",
          "azimute": "228",
          "direcao": "42",
          "quadrante": "SW",
          "sentido": "Sinistral",
          "descricao": "",
          "mergulho": "86",
          "familia": ""
        }
      ]
  },
    "arquivos": [],
    "idUnigadeGeologica": [
      {
        "idUnidade": 816
      },
      {
        "idUnidade": 2295
      }
    ]
  }
]

1 个答案:

答案 0 :(得分:2)

您正在访问此行中错误的JSON对象:

JSONObject anObj = jObject.getJSONObject("analiseCampo");

应该是:

JSONObject anObj = temp.getJSONObject("analiseCampo");

由于temp是您要为listaDePontos数组分配的每个元素。另外,考虑到数据的复杂性,您应该考虑使用以下方法将JSON直接映射到对象:

String json = "" ; // <-- your JSON here
Ponto ponto = new Gson().fromJson(json, Ponto.class);