1

Я разрабатываю приложение для Android. Я решил использовать библиотеку Square's Retrofit, которая соответствует моим требованиям. Однако я столкнулся с проблемой десериализации . Мой бэкэнд написан в Rails 4 с использованием драгоценного камня rails-api. active-model-serializer генерирует этот вид JSON (JSONs иметь корневой элемент):Использование Retrofit с Rails API

{"user":{"id":1,"name":"Saygun","github_url":"www.github.com/saygun" }} 

Вот как я инициализировать retrofit.

public class User { 

    private String mId; 
    private String mName; 
    private String mGithubUrl; 

    public String getId() { 
     return mName; 
    } 

    public void setId(String id) { 
     this.mId = id; 
    } 


    public String getName() { 
     return mName; 
    } 

    public void setName(String name) { 
     this.mName = name; 
    } 

    public String getGithubUrl(String url) { 
     this.mGithubUrl = url; 
    } 
} 


public interface RestService { 

    @GET("https://stackoverflow.com/users/{id}") 
    void getUser(@Path("id") int id, Callback<User> cb); 
} 

Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .registerTypeAdapter(Date.class, new DateTypeAdapter()) .create();

RestAdapter restAdapter = new RestAdapter.Builder() 
     .setEndpoint(BuildConfig.API_ENDPOINT) 
     .setLogLevel(RestAdapter.LogLevel.FULL) 
     .setRequestInterceptor(requestInterceptor) 
     .setConverter(new GsonConverter(gson)) 
     .build(); 

RestService service = restAdapter.create(RestService.class); 
service.getUser(1, new Callback<User>() { 
    @Override 
    public void success(User user, Response response) { 
      //User is null 
    } 

    @Override 
    public void failure(RetrofitError error) { 

    } 
}); 

Есть ли кто-нибудь может показать мне, что я пропускаю. Почему retrofit не может создать пользователя?

+0

ли вы это решить? – fiyah

ответ

0

Как я думаю, вы должны использовать одно и то же имя для своих полей как API-класс и реализуете Serializable в своем классе клиента.

что-то вроде этого:

public class User implements Serializable { 

public String id ; 
public String name; 
public String github_url; 

} 

или вы можете также использовать @SerializedName ("serialized_name")

так:

public class User implements Serializable { 
    @SerializedName() 
    private String mId; 

    @SerializedName() 
    private String mName; 

    @SerializedName() 
    private String mGithubUrl; 
} 
Смежные вопросы