转换为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; 
    } 
} 

调试屏幕:

enter image description here

+0

您确定您的用户对象在序列化时不为空吗? –

+0

@MikhailChibel是的,我调试过了,检查屏幕截图 – guisantogui

+0

org.json(JSONObject)没有mapper API。它不能将你的pojo翻译成json。阅读包装文档! – Selvin

@Selvin和@ cricket_007你是最棒的!

我得到这个使用你的提示,我的印刷是错误的,我找到了解决方案。 我有两种类型的用户在我的应用程序,Facebook用户或本地用户,两种形式,但只有一个对象,这里是问题,当我发送Facebook对象(完整)它工作正常,但是当我试图发送本地用户,一些null属性,它崩溃了我的序列化。

因此,我必须在发送之前检查每个属性,这只是一种解决方法,但现在已经足够了,非常感谢你们!