如何通过改造库获取对象?

时间:2015-06-05 13:15:38

标签: android json serialization retrofit

我第一次尝试使用改造库,我遇到了问题。

这是我的JSON:

{  
   "id":"15",
   "email":"example@gmail.com",
   "phone":null,
   "password":"",
   "login":"",
   "userProfile":{ 
      "lan_status":"",
      "name":"example",
      "sex":"0",
      "second_name":"",
      "date_of_birth":"0000-00-00 00:00:00"
   }
}

这是我的改装代码:

String url = "https://example.com";
        RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(url)
                .build();

        mServerApi = restAdapter.create(ServerApi.class);
mServerApi.getUserInformation( new Callback <GetUserProfileInfo> () {
            @Override
            public void success(GetUserProfileInfo getUserProfileInfo, Response response) {
                saveUserInfromationToDb(mActivity, getUserProfileInfo);
            }

            @Override
            public void failure(RetrofitError error) {

            }
        });

public class GetUserProfileInfo {
    @SerializedName("id")
    public int mUserId;
    @SerializedName("email")
    public String mUserEmail;
    @SerializedName("phone")
    public String mUserPhone;
    @SerializedName("password")
    public String mUserPassword;
    @SerializedName("login")
    public String mUserLogin;
    @SerializedName("userProfile")
    public List<GetUserProfileInfo_2> userProfile;

}

public class GetUserProfileInfo_2 {
    @SerializedName("lanStatus")
    public int mLanStatus;
    @SerializedName("firstName")
    public String mFirstName;
    @SerializedName("lastName")
    public String mLastName;
    @SerializedName("sex")
    public int mSex;
}

但我遇到了这个问题: retrofit.RetrofitError:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但在第1行第533行是BEGIN_OBJECT路径$ .userProfile

任何帮助都会很高兴!

3 个答案:

答案 0 :(得分:2)

public class GetUserProfileInfo {
    @SerializedName("id")
    public int mUserId;
    @SerializedName("email")
    public String mUserEmail;
    @SerializedName("phone")
    public String mUserPhone;
    @SerializedName("password")
    public String mUserPassword;
    @SerializedName("login")
    public String mUserLogin;
    @SerializedName("userProfile")
    public GetUserProfileInfo_2 userProfile;

}

答案 1 :(得分:0)

根据你的JSON userProfile必须是一个对象,而不是一个列表。使用userProfile中的所有字段创建另一个类,并使用此类代替List<GetUserProfileInfo_2> userProfile

答案 2 :(得分:0)

您可以通过查看我使用Stackoverflow REST API创建的示例应用程序获益。我从Retrofit调用得到的对象是一个对象列表,所以它似乎非常适合你的需求!

https://github.com/BrunoCa/stackrest 这就是应用程序:https://play.google.com/store/apps/details?id=bruno.stackrest

享受