且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

空指针异常解析与GSON JSON的Andr​​oid

更新时间:2023-11-16 11:09:34

您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.