簡體   English   中英

轉換為json時,Object變為null

[英]Object become null when converted to json

這是問題所在,當我使用改造將我的對象發送到服務器時,我得到了它。 我這樣做是為了創建json對象:

HashMap<String, UserModel> map = new HashMap<>();
map.put("user", user);

但是,當json到達服務器時,我得到了這樣的東西:

{"user":null}

然后我用這行打印了ny 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屬性,它崩潰了我的序列化。

所以我必須在發送之前檢查每個屬性,這只是一個解決方法,但現在已經足夠了,非常感謝大家!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM