【发布时间】:2017-03-07 15:42:56
【问题描述】:
我目前正在使用 volley 发出获取请求,并且在 onResponse 中我正在尝试使用 gson 将 jsonObject 解析为我的模型。
请求后返回的JSON:
{
"success": 1,
"message": "Done",
"data": {
"company": "companyname",
"email": "email",
"color": "#ffffff",
"text_color": "#000000",
"background_image": "BITMAP ENCODED",
"logo": "BITMAP ENCODED",
"enable_health_and_safety": 0,
"health_and_safety": "",
"sign_in_button_text": "SIGN IN",
"sign_out_button_text": "SIGN OUT",
"enable_picture": 0,
"package_type": "TRIAL",
"created_at": "2017-03-06 12:21:23",
"updated_at": "2017-03-06 12:21:23",
"telephone": "",
"auto_sign_out": 0,
"sign_out_time": "",
"enable_printing": 0
}
}
我的模特
public class ClientResponseModel implements Serializable {
private String success;
private String message;
private ClientData clientData;
public String getSuccess() {
return success;
}
public void setSuccess(String success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public ClientData getClientData() {
return clientData;
}
public void setClientData(ClientData clientData) {
this.clientData = clientData;
}
public class ClientData implements Serializable {
private String company;
private String email;
private String client_color;
private String text_color;
private String background_image;
private String logo;
private int enable_health_and_safety;
private String health_and_safety;
private String sign_in_button_text;
private String sign_out_button_text;
private int enable_picture;
private String package_type;
private String created_at;
private String updated_at;
private String telephone;
private int auto_sign_out;
private String sign_out_time;
private int enable_printing;
//all the getters and setters for above
}
我的 onResponse 函数
final JsonObjectRequest getClientData = new JsonObjectRequest(Request.Method.GET, clientUrl, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("getUserDataOnResponse", response.toString());
Gson gson = new Gson();
ClientResponseModel clientResponseModel = gson.fromJson(response.toString(), ClientResponseModel.class);
Log.i("sucess",clientResponseModel.getSuccess());
Log.i("message",clientResponseModel.getMessage());
Log.i("company",clientResponseModel.getClientData().getEmail());
}
但是当尝试从 clientData 获取数据时,我可以获得成功和消息,例如获取电子邮件。该应用程序崩溃,我收到以下错误消息。
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String ClientResponseModel$ClientData.getEmail()' on a null object reference
我不确定我做错了什么,我看过几个链接,例如How to use gson and volley parse nested json
提前感谢所有帮助。
【问题讨论】:
-
JSONObject response然后gson.fromJson(response.toString()...解析 json 两次......真是浪费资源 -
感谢您的评论,首先我是学习者并且错误地学习所以我接受您的并将我的代码变得更好,其次留下的评论可以留下帮助精神而不是批评者,如果离开作为评论家,请按照您的方式留下答案,这样至少其他人可以学习。 @塞尔文
-
试试
@SerializedName("data") @Expose private ClientData clientData;否则你将不得不为每个字段使用注释 -
嗨@PavneetSingh 感谢您的评论,如前所述,我只是在学习。就我的知识而言,您能否解释一下我如何实现它。我将在哪里实施 Expose private ClientData clientData;?我是否正确地说 SerializeName("data") 超出了私有 ClientData 客户端数据;并且 Expose 语句会在 ClientData 类之上?
-
\n表示输入@SerializedName("data") \n@Expose\n private ClientData clientData;,我不确定它是否会起作用
标签: android json gson android-volley