空指针异常解析与GSON JSON的Andr​​oid [英] null pointer exception-parsing json with gson android

查看:638
本文介绍了空指针异常解析与GSON JSON的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好我试图使用GSON library.My JSON字符串JSON来分析是这样的。

  {
数据:
    {
        atb_atestwebservice_cities:[
            {
                ID:3
                城市:阿杰梅尔
                日期:2012-03-01 19点三十分32秒
            }
        ]
    },
    {
        atb_atestwebservice_states:[
            {
                ID:2
                状态:果阿
                日期:2012-02-28 12点53分51秒
            }
        ]
    }
]

}
随着以下类

 公共类城市{@SerializedName(ID)
私人字符串ID;@SerializedName(城市)
私人字符串的城市;@SerializedName(DATE)
私人字符串日期;公共城市(ID字符串,字符串市,字符串日期)
{
    this.id = ID;
    this.date =日期;
    this.cities =城市;}
公共字符串的getId()
{
    返回ID;
}
公共字符串getCity()
{
    返回城市;
}
公共字符串GETDATE()
{
    归期;
}

}
 和

 公共类美国{
@SerializedName(ID)
私人字符串ID;@SerializedName(国家)
私人字符串状态;@SerializedName(DATE)
私人字符串日期; 大众美国(ID字符串,字符串的状态,字符串日期)
{
    this.id = ID;
    this.date =日期;
    this.states =状态;}
公共字符串的getId()
{
    返回ID;
}
公共字符串getCity()
{
    返回的状态;
}
公共字符串GETDATE()
{
    归期;
}

}

和数据类

 公共类数据{ 私人列表<城市和GT; atb_atestwebservice_cities; 私人列表<美国> atb_atestwebservice_states; 公开数据(表<城市和GT; cityList,列表与LT;美国> stateList)
 {
     this.atb_atestwebservice_cities = cityList;
     this.atb_atestwebservice_states = stateList;
 }
 公开名单<城市和GT; getCityList()
 {
     返回atb_atestwebservice_cities;
 } 公共无效setCityList(列表<城市和GT; cityList)
 {
     this.atb_atestwebservice_cities = cityList;
 } 公开名单<美国> getSateList()
 {
     返回atb_atestwebservice_states;
 } 公共无效setDatList(列表<美国> stateList)
 {
     this.atb_atestwebservice_states = stateList;
 }

}
 和code反序列化JSON字符串

  GSON GSON =新GSON();
数据数据= gson.fromJson(jsonString,Data.class);

问题是我得到exception.i都提到这个的链接parsing.I 我不知道什么是problem.Are我的POJO类正确或是否需要修改或添加一些更多的班呢?
编辑:这是我的日志猫

  03-14 14:59:31.694:ERROR / AndroidRuntime(323):显示java.lang.NullPointerException
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在com.jimesh.ShowData $ LongOperation.onPostExecute(ShowData.java:88)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在com.jimesh.ShowData $ LongOperation.onPostExecute(ShowData.java:1)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在android.os.AsyncTask.finish(AsyncTask.java:417)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在android.os.AsyncTask.access $ 300(AsyncTask.java:127)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:429)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在android.os.Handler.dispatchMessage(Handler.java:99)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在android.os.Looper.loop(Looper.java:123)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在android.app.ActivityThread.main(ActivityThread.java:4627)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在java.lang.reflect.Method.invokeNative(本机方法)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在java.lang.reflect.Method.invoke(Method.java:521)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-14 14:59:31.694:ERROR / AndroidRuntime(323):在dalvik.system.NativeStart.main(本机方法)


解决方案

您Data.class没有正确写拿到。你需要下面的结构,让您的所有反应在适当的方式您的JSON数据解析。

您需要使用下面的类获取结果数据。

  GSON GSON =新GSON();
数据数据= gson.fromJson(jsonString,Data.class);

下面是你的数据类

 公共类数据{ @SerializedName(数据)
 公开名单< ResultData> mResultData;
}  公共类ResultData {    @SerializedName(atb_atestwebservice_cities)
    公开名单<城市> mCityList;    @SerializedName(atb_atestwebservice_states)
    公开名单<州与GT; mStateList;  }
公共类城市{/ *身份证:3,
城市:阿杰梅尔
日期:2012-03-01 19点三十分32秒* /    @SerializedName(ID)
    公共字符串ID;    @SerializedName(城市)
    公共字符串mCitie;    @SerializedName(DATE)
    公共字符串MDATA;}
  公共类国家{
/ *身份证:2,
状态:果阿
日期:2012-02-28 12点53分51秒* /@SerializedName(ID)
公共字符串ID;@SerializedName(国家)
公共字符串mState;@SerializedName(DATE)
公共字符串mDate; }

所有这些类,你需要在你的包添加。

Hi i am trying to parse Json using gson library.My Json String is this

{
"data": [
    {
        "atb_atestwebservice_cities": [
            {
                "id": "3",
                "cities": "Ajmer",
                "date": "2012-03-01 19:30:32"
            }
        ]
    },
    {
        "atb_atestwebservice_states": [
            {
                "id": "2",
                "states": "goa",
                "date": "2012-02-28 12:53:51"
            }
        ]
    }
]

} With following classes

public class Cities {

@SerializedName("id")
private String id;

@SerializedName("cities")
private String cities;

@SerializedName("date")
private String date;

public Cities(String id,String city,String date)
{
    this.id=id;
    this.date=date;
    this.cities=city;

}
public String getId()
{
    return id;
}
public String getCity()
{
    return cities;
}
public String getDate()
{
    return date;
}

} and

public class States {
@SerializedName("id")
private String id;

@SerializedName("states")
private String states;

@SerializedName("date")
private String date;

 public States(String id,String states,String date)
{
    this.id=id;
    this.date=date;
    this.states=states;

}
public String getId()
{
    return id;
}
public String getCity()
{
    return states;
}
public String getDate()
{
    return date;
}

}

and a data class

public class Data {



 private List<Cities> atb_atestwebservice_cities;

 private List<States> atb_atestwebservice_states;

 public Data(List<Cities> cityList,List<States>stateList)
 {
     this.atb_atestwebservice_cities=cityList;
     this.atb_atestwebservice_states=stateList;
 }


 public List<Cities> getCityList()
 {
     return atb_atestwebservice_cities;
 }

 public void setCityList(List<Cities> cityList)
 {
     this.atb_atestwebservice_cities=cityList;
 }

 public List<States> getSateList()
 {
     return atb_atestwebservice_states;
 }

 public void setDatList(List<States> stateList)
 {
     this.atb_atestwebservice_states=stateList;
 }

} and code to deserialize the json string

Gson gson = new Gson();
Data data = gson.fromJson(jsonString,Data.class);

The problem is i am getting null pointer exception.i have referred this link for parsing.I am not sure what is the problem.Are my POJO classes proper or do i need to modify or add some more class ? EDIT:here is my log cat

  03-14 14:59:31.694: ERROR/AndroidRuntime(323): java.lang.NullPointerException
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at com.jimesh.ShowData$LongOperation.onPostExecute(ShowData.java:88)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at com.jimesh.ShowData$LongOperation.onPostExecute(ShowData.java:1)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at android.os.AsyncTask.finish(AsyncTask.java:417)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at android.os.Looper.loop(Looper.java:123)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at android.app.ActivityThread.main(ActivityThread.java:4627)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at java.lang.reflect.Method.invokeNative(Native Method)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at java.lang.reflect.Method.invoke(Method.java:521)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-14 14:59:31.694: ERROR/AndroidRuntime(323):     at dalvik.system.NativeStart.main(Native Method)

解决方案

your Data.class is not properly write to get your json data parse in proper way .you need following structure for to get your all response.

you need to use following classes for get Result Data.

Gson gson = new Gson();
Data data = gson.fromJson(jsonString,Data.class);

Here is your Data class

 public class Data {

 @SerializedName("data")
 public List<ResultData> mResultData;
}

  public class ResultData {

    @SerializedName("atb_atestwebservice_cities")
    public List<City> mCityList;

    @SerializedName("atb_atestwebservice_states")
    public List<State> mStateList;

  }


public class City {

/*"id": "3",
"cities": "Ajmer",
"date": "2012-03-01 19:30:32"*/

    @SerializedName("id")
    public String id;

    @SerializedName("cities")
    public String mCitie;

    @SerializedName("date")
    public String mData;

}


  public class State {


/*"id": "2",
"states": "goa",
"date": "2012-02-28 12:53:51"*/

@SerializedName("id")
public String id;

@SerializedName("states")
public String mState;

@SerializedName("date")
public String mDate;

 }

All these class you need to add in your package.

这篇关于空指针异常解析与GSON JSON的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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