转换为json时对象变为空
问题描述:
这是当我使用改进将对象发送到服务器时出现问题的原因。我这样做是为了创建JSON对象:转换为json时对象变为空
HashMap<String, UserModel> map = new HashMap<>();
map.put("user", user);
但是,当JSON在我得到了这样的服务器到达:
{"user":null}
然后我印有该行纽约JSON文件:
Log.d("TAG", new JSONObject(map).toString());
而且我看到了同样的空对象。
那么,这是我的问题,为什么会发生这种情况?我该如何解决这个问题?
这里去了解我的项目的一些信息:
Retrofit version: 2.0.0
Retrofit serializer: jackson version 2.0.0
using also jackson to convert JodaTime version 2.4.0
在这里不用我如何得到改造实例:
public T buildServiceInstance(Class<T> clazz){
return new Retrofit.Builder().baseUrl(BuildConfig.API_HOST)
.addConverterFactory(JacksonConverterFactory.create())
.build().create(clazz);
}
我认为这种方法在这里:
public static final IUserApi serviceInstance = new ApiBuildRequester<IUserApi>()
.buildServiceInstance(IUserApi.class);
方法声明在接口IUserApi上:
@POST("User.svc/Save")
Call<ResponseSaveUserApiModel> save(@Body HashMap<String, UserModel> map);
,最后,但我想,不是那么重要:
public class UserModel implements Parcelable {
private String idUser;
private String name;
private String email;
@JsonProperty("password")
private String safePassword;
private String salt;
private String phoneNumber;
private String facebookProfilePictureUrl;
private String facebookUserId;
public UserModel() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdUser() {
return idUser;
}
public void setIdUser(String idUser) {
this.idUser = idUser;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSafePassword() {
return safePassword;
}
public void setSafePassword(String safePassword) {
this.safePassword = safePassword;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getFacebookProfilePictureUrl() {
return facebookProfilePictureUrl;
}
public void setFacebookProfilePictureUrl(String facebookProfilePictureUrl) {
this.facebookProfilePictureUrl = facebookProfilePictureUrl;
}
public String getFacebookUserId() {
return facebookUserId;
}
public void setFacebookUserId(String facebookUserId) {
this.facebookUserId = facebookUserId;
}
@Override
public int describeContents() {
return 0;
}
public UserModel(Parcel in) { // Deve estar na mesma ordem do "writeToParcel"
setIdUser(in.readString());
setName(in.readString());
setEmail(in.readString());
setSafePassword(in.readString());
setPhoneNumber(in.readString());
setFacebookProfilePictureUrl(in.readString());
setFacebookUserId(in.readString());
}
@Override
public void writeToParcel(Parcel dest, int flags) { //Deve estar na mesma ordem do construtor que recebe parcel
dest.writeString(idUser);
dest.writeString(name);
dest.writeString(email);
dest.writeString(safePassword);
dest.writeString(phoneNumber);
dest.writeString(facebookProfilePictureUrl);
dest.writeString(facebookUserId);
}
public static final Parcelable.Creator<UserModel> CREATOR = new Parcelable.Creator<UserModel>(){
@Override
public UserModel createFromParcel(Parcel source) {
return new UserModel(source);
}
@Override
public UserModel[] newArray(int size) {
return new UserModel[size];
}
};
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
}
调试屏幕:
答
@Selvin和@ cricket_007你是最棒的!
我得到这个使用你的提示,我的印刷是错误的,我找到了解决方案。 我有两种类型的用户在我的应用程序,Facebook用户或本地用户,两种形式,但只有一个对象,这里是问题,当我发送Facebook对象(完整)它工作正常,但是当我试图发送本地用户,一些null属性,它崩溃了我的序列化。
因此,我必须在发送之前检查每个属性,这只是一种解决方法,但现在已经足够了,非常感谢你们!
您确定您的用户对象在序列化时不为空吗? –
@MikhailChibel是的,我调试过了,检查屏幕截图 – guisantogui
org.json(JSONObject)没有mapper API。它不能将你的pojo翻译成json。阅读包装文档! – Selvin