Android 从JSON到POJO的GSON无法获取值和获取空值

Android 从JSON到POJO的GSON无法获取值和获取空值,android,json,gson,pojo,android-webservice,Android,Json,Gson,Pojo,Android Webservice,嗨,我已经开始使用新的库Loopj和GSON进行Web服务响应 然而,我无法从GSON到POJO获得价值。 我不明白如何从gson获得价值 先谢谢你 我已经输入了try-catch,它将给我空指针异常 这里是我的json解析 { "user": { "u_id": "89", "u_name": "Vasudev", "u_email": "dec@mail.com", "u_mno": "9638063647", "u_pass": "43914d8b

嗨,我已经开始使用新的库Loopj和GSON进行Web服务响应

然而,我无法从GSON到POJO获得价值。 我不明白如何从gson获得价值

先谢谢你

我已经输入了try-catch,它将给我空指针异常

这里是我的json解析

 {
"user": {
    "u_id": "89",
    "u_name": "Vasudev",
    "u_email": "dec@mail.com",
    "u_mno": "9638063647",
    "u_pass": "43914d8bde432de32b78b28b4cd8110e",
    "add_by": "0",
    "u_type": "owner",
    "veri_code": "20-08-2015 12:34:18",
    "created_at": "",
    "profile_img": "no",
    "status": "Hi There",
    "device_id": "",
    "push_token": "",
    "gcm_id": "APA91bF85pjEQpR4vBDc-xzas2EIGtd77N218qMMrlnSauJOMI-HLAbSjPu7jroMLjfsGCLlSr_lM5XclQW84sbbLYeZA6-9Nt7Y5EFw7zvxIs_sOQ1jCggdBmPfgINdAjwZwOG4Pge0",
    "active": "a",
    "country": "India"
},
"msg": {
    "message": "Success...!",
    "status": "1"
}
}

在这里我的对象类得到更多的想法

package objects;

import com.google.gson.annotations.SerializedName;
import java.util.List;
public class LoginInfo {


@SerializedName("LoginInfo")
public List<LoginInfo> LogIn;


@SerializedName("u_id")
public String U_ID;

@SerializedName("u_name")
public String U_NAME;

@SerializedName("u_email")
public String U_EMAIL;

@SerializedName("u_mno")
public String U_MNO;

@SerializedName("u_pass")
public String U_PASS;

@SerializedName("add_by")
public String ADD_BY;

@SerializedName("u_type")
public String U_TYPE;

@SerializedName("veri_code")
public String VERI_CODE;

@SerializedName("created_at")
public String CREATED_AT;

@SerializedName("profile_img")
public String PROFILE_IMG;

@SerializedName("status")
public String STATUS;

@SerializedName("gcm_id")
public String GCM_ID;

@SerializedName("active")
public String ACTIVE;

@SerializedName("country")
public String COUNTRY;


public List<LoginInfo> getLogIn() {
    return LogIn;
}

public void setLogIn(List<LoginInfo> logIn) {
    LogIn = logIn;
}

public String getU_ID() {
    return U_ID;
}

public void setU_ID(String u_ID) {
    U_ID = u_ID;
}

public String getU_NAME() {
    return U_NAME;
}

public void setU_NAME(String u_NAME) {
    U_NAME = u_NAME;
}

public String getU_EMAIL() {
    return U_EMAIL;
}

public void setU_EMAIL(String u_EMAIL) {
    U_EMAIL = u_EMAIL;
}

public String getU_MNO() {
    return U_MNO;
}

public void setU_MNO(String u_MNO) {
    U_MNO = u_MNO;
}

public String getU_PASS() {
    return U_PASS;
}

public void setU_PASS(String u_PASS) {
    U_PASS = u_PASS;
}

public String getADD_BY() {
    return ADD_BY;
}

public void setADD_BY(String ADD_BY) {
    this.ADD_BY = ADD_BY;
}

public String getU_TYPE() {
    return U_TYPE;
}

public void setU_TYPE(String u_TYPE) {
    U_TYPE = u_TYPE;
}

public String getVERI_CODE() {
    return VERI_CODE;
}

public void setVERI_CODE(String VERI_CODE) {
    this.VERI_CODE = VERI_CODE;
}

public String getCREATED_AT() {
    return CREATED_AT;
}

public void setCREATED_AT(String CREATED_AT) {
    this.CREATED_AT = CREATED_AT;
}

public String getPROFILE_IMG() {
    return PROFILE_IMG;
}

public void setPROFILE_IMG(String PROFILE_IMG) {
    this.PROFILE_IMG = PROFILE_IMG;
}

public String getSTATUS() {
    return STATUS;
}

public void setSTATUS(String STATUS) {
    this.STATUS = STATUS;
}

public String getGCM_ID() {
    return GCM_ID;
}

public void setGCM_ID(String GCM_ID) {
    this.GCM_ID = GCM_ID;
}

public String getACTIVE() {
    return ACTIVE;
}

public void setACTIVE(String ACTIVE) {
    this.ACTIVE = ACTIVE;
}

public String getCOUNTRY() {
    return COUNTRY;
}

public void setCOUNTRY(String COUNTRY) {
    this.COUNTRY = COUNTRY;
}
 }
在我的课堂上,我试图从GSON中获得价值

   public void getLogin() {

    RequestParams params = new RequestParams();
    params.put("user_name", strUserName);
    params.put("user_pass", strPassword);



    pd = ProgressDialog.show(LoginActivity.this, "", "Loading...", true, false);
    AsyncHttpClient mClient = new AsyncHttpClient();
    mClient.setTimeout(6 * 1000);
    mClient.post( mURL+"login.php", params, new LoginResponsHandler());
}


class LoginResponsHandler extends AsyncHttpResponseHandler {

    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }

    @Override
    public void onSuccess(String content) {
        // TODO Auto-generated method stub
        super.onSuccess(content);
        try {


            LogsClass.ToastMsg(getApplicationContext(), content);

           loginInfo = new LoginInfo();

            Gson gson = new Gson();

            Type infoType = new TypeToken<LoginInfo>() {}.getType();

            Log.e("response", content);

            loginInfo = gson.fromJson(content, infoType);


                String Name =  loginInfo.U_NAME;
                String homephone = loginInfo.U_MNO;

            String Name1 =  loginInfo.getU_NAME();
            String homephone1 = loginInfo.getU_MNO();

            String Name2 = loginInfo.LogIn.get(0).U_NAME;
            String homephone2 = loginInfo.LogIn.get(0).getU_MNO();






        } catch (Exception ex) {
            LogsClass.e("--->" + ex.getMessage());
        }

    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub
        super.onFinish();
        pd.dismiss();
    }

    @Override
    public void onFailure(Throwable error, String content) {
        // TODO Auto-generated method stub
        super.onFailure(error, content);

        LogsClass.ToastMsg(getApplicationContext(), "Failure");

        pd.dismiss();
    }
}

将对象类更改为

public class LoginInfo {
  UserInfo user;
  MessageInfo msg;
  //getter and setter for them
}
并分别使用键作为字符串变量创建类UserInfo和MessageInfo

并作出以下修改

String Name =  loginInfo.getUser().getU_Name();

在这里,我从上面的例子中找出了我的问题,并做了一些小改动

这是我的JSON回复帖子:

{

正确的对象类:

  public class LoginInfo {


@SerializedName("user")
public UserData UserInfo;

public class UserData {

    @SerializedName("u_id")
    public String U_ID;

    @SerializedName("u_name")
    public String U_NAME;

    @SerializedName("u_email")
    public String U_EMAIL;

    @SerializedName("u_mno")
    public String U_MNO;

    @SerializedName("u_pass")
    public String U_PASS;

    @SerializedName("add_by")
    public String ADD_BY;

    @SerializedName("u_type")
    public String U_TYPE;

    @SerializedName("veri_code")
    public String VERI_CODE;

    @SerializedName("created_at")
    public String CREATED_AT;

    @SerializedName("profile_img")
    public String PROFILE_IMG;

    @SerializedName("status")
    public String STATUS;

    @SerializedName("gcm_id")
    public String GCM_ID;

    @SerializedName("active")
    public String ACTIVE;

    @SerializedName("country")
    public String COUNTRY;


}


@SerializedName("msg")
public MessageData MessageInfo;

public class MessageData
{


    @SerializedName("message")
    public String Messsage;

    @SerializedName("status")
    public int Status;

}
}

这是我获得价值的活动课程:

    public void getLogin() {

    RequestParams params = new RequestParams();
    params.put("user_name", strUserName);
    params.put("user_pass", strPassword);



    pd = ProgressDialog.show(LoginActivity.this, "", "Loading...", true, false);
    AsyncHttpClient mClient = new AsyncHttpClient();
    mClient.setTimeout(6 * 1000);
    mClient.post(Urls.BASE_URL, params, new LoginResponsHandler());
}


class LoginResponsHandler extends AsyncHttpResponseHandler {

    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }

    @Override
    public void onSuccess(String content) {
        // TODO Auto-generated method stub
        super.onSuccess(content);
        try {


            loginInfo = new LoginInfo();
            Gson gson = new Gson();
            Type infoType = new TypeToken<LoginInfo>() {}.getType();
            Log.e("response", content);
            loginInfo = gson.fromJson(content, infoType);




            if(loginInfo.MessageInfo.Status==1)
            {

                Toast.makeText(LoginActivity.this,""+loginInfo.MessageInfo.Messsage,Toast.LENGTH_SHORT).show();;
                String name=loginInfo.UserInfo.U_NAME;
                String id=loginInfo.UserInfo.U_ID;


                LogsClass.ToastMsg(getApplicationContext(),loginInfo.UserInfo.U_NAME + "n/"
                            + loginInfo.UserInfo.U_MNO);

                Utils.saveToUserDefaults(LoginActivity.this, Constants.KEY_UID, loginInfo.UserInfo.U_ID);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_UNAME,loginInfo.UserInfo.U_NAME);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_EMAILID,loginInfo.UserInfo.U_EMAIL);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_NUMBER,loginInfo.UserInfo.U_MNO);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_PASSWORD,loginInfo.UserInfo.U_PASS);



            }else
            {


            }


        } catch (Exception ex) {
            LogsClass.e("--->" + ex.getMessage());
        }

    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub
        super.onFinish();
        pd.dismiss();
    }

    @Override
    public void onFailure(Throwable error, String content) {
        // TODO Auto-generated method stub
        super.onFailure(error, content);

        LogsClass.ToastMsg(getApplicationContext(), "Failure");
        pd.dismiss();
    }
}

请将JSON字符串添加到问题中,并准确说明在尝试上述操作时遇到的错误或异常snippet@ShadowDroid我已经发布了我的json。。。。它将在try-catch-null-pointer异常中显示您得到的是null-pointer,因为您为序列化和反序列化创建的类不正确…loginit的jsonObject上的第一个位置为您工作ryt?随着你对这些东西的理解,并对我的小解决方案进行必要的修改,这看起来像是gr8……首先,如果你用谷歌搜索过gson,你会发现很多例子和教程。还有一个小建议,不要直接访问实例变量,尝试使用getter方法进行更多解释:
    public void getLogin() {

    RequestParams params = new RequestParams();
    params.put("user_name", strUserName);
    params.put("user_pass", strPassword);



    pd = ProgressDialog.show(LoginActivity.this, "", "Loading...", true, false);
    AsyncHttpClient mClient = new AsyncHttpClient();
    mClient.setTimeout(6 * 1000);
    mClient.post(Urls.BASE_URL, params, new LoginResponsHandler());
}


class LoginResponsHandler extends AsyncHttpResponseHandler {

    @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }

    @Override
    public void onSuccess(String content) {
        // TODO Auto-generated method stub
        super.onSuccess(content);
        try {


            loginInfo = new LoginInfo();
            Gson gson = new Gson();
            Type infoType = new TypeToken<LoginInfo>() {}.getType();
            Log.e("response", content);
            loginInfo = gson.fromJson(content, infoType);




            if(loginInfo.MessageInfo.Status==1)
            {

                Toast.makeText(LoginActivity.this,""+loginInfo.MessageInfo.Messsage,Toast.LENGTH_SHORT).show();;
                String name=loginInfo.UserInfo.U_NAME;
                String id=loginInfo.UserInfo.U_ID;


                LogsClass.ToastMsg(getApplicationContext(),loginInfo.UserInfo.U_NAME + "n/"
                            + loginInfo.UserInfo.U_MNO);

                Utils.saveToUserDefaults(LoginActivity.this, Constants.KEY_UID, loginInfo.UserInfo.U_ID);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_UNAME,loginInfo.UserInfo.U_NAME);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_EMAILID,loginInfo.UserInfo.U_EMAIL);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_NUMBER,loginInfo.UserInfo.U_MNO);
                Utils.saveToUserDefaults(LoginActivity.this,Constants.KEY_PASSWORD,loginInfo.UserInfo.U_PASS);



            }else
            {


            }


        } catch (Exception ex) {
            LogsClass.e("--->" + ex.getMessage());
        }

    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub
        super.onFinish();
        pd.dismiss();
    }

    @Override
    public void onFailure(Throwable error, String content) {
        // TODO Auto-generated method stub
        super.onFailure(error, content);

        LogsClass.ToastMsg(getApplicationContext(), "Failure");
        pd.dismiss();
    }
}