[英]Retrofit returns null values
我正在使用Retrofit,而且我在Android中非常棒。
我的JSON響應
{
"movie": {
"_id": "568661682d33bca267fdf81b",
"poster_path": "https://image.tmdb.org/t/p/w154/xHfhQIK4BNlsGv5Ylx8mVq0hJT1.jpg",
"adult": false,
"overview": "",
"release_date": "2015-05-15",
"id": 76341,
"original_title": "Mad Max: Fury Road",
"original_language": "en",
"title": "Mad Max: Furia en la carretera",
"vote_count": 3105,
"__v": 0,
"popular": true,
"production_companies": [],
"cast": [],
"genre_ids": [
53,
28,
12
]
}
}
這是我的電影模型:
public class Movie {
public String Id;
//more variables
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
//more getter and setter
我的Retrofit界面
public interface MyApiEndPointsInterface {
@GET("/movie/{id}")
Call<Movie> getMovie(@Path("id") int id);
}
和活動中的代碼
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
MyApiEndPointsInterface apiService =
retrofit.create(MyApiEndPointsInterface.class);
Call<Movie> call = apiService.getMovie(76341);
call.enqueue(new Callback<Movie>() {
@Override
public void onResponse(Response<Movie> response, Retrofit retrofit) {
Log.d("MainActivity", response.body().title);
}
@Override
public void onFailure(Throwable t) {
}
});
我認為它可以是JSON響應,因為它有一個優秀的實例,但我不知道如何在代碼中使用它。
我沒有得到回復,這一切都正確嗎?
問題是JSON解析器不期望在JSON中包裝“movie”數據的未命名根對象。
如果您可以更改服務器返回的JSON,請刪除外部對象,以便您擁有
{
"_id": "568661682d33bca267fdf81b",
"poster_path": "https://image.tmdb.org/t/p/w154/xHfhQIK4BNlsGv5Ylx8mVq0hJT1.jpg",
"adult": false,
"overview": "",
"release_date": "2015-05-15",
"id": 76341,
"original_title": "Mad Max: Fury Road",
"original_language": "en",
"title": "Mad Max: Furia en la carretera",
"vote_count": 3105,
"__v": 0,
"popular": true,
"production_companies": [],
"cast": [],
"genre_ids": [
53,
28,
12
]
}
如果您無法改變服務器的響應,可以通過幾種方法在客戶端處理它。 我只是創建另一個對象來映射到外部JSON對象,因此將現有的Movie類保留為原樣,添加:
public class MovieResponse {
public Movie movie;
}
然后更改Retrofit調用以使用MovieResponse而不是Movie。 然后你可以參考
movieResponse.movie
您的String名稱區分它們在JSON輸出中的顯示方式。 將String Id to String id
更改String Id to String id
並且它應該工作,它在getter和setter名稱中無關緊要(例如getId
),但變量本身需要與JSON中的大小寫匹配。
將電影模型更改為:
public class Movie {
@SerializedName("_id")
public String id;
//more variables
public String getId() {
return Id;
}
public void setId(String id) {
id = id;
}
}
Gson需要確切知道如何通過反射來映射模型。 如果你不另外說明,它主要使用你的變量名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.