Dav*_*que 3 java android retrofit
我正在使用 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
]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的电影模型:
public class Movie {
public String Id;
//more variables
public String getId() {
return Id;
}
public void setId(String id) {
Id = id;
}
//more getter and setter
Run Code Online (Sandbox Code Playgroud)
我的改造界面
public interface MyApiEndPointsInterface {
@GET("/movie/{id}")
Call<Movie> getMovie(@Path("id") int id);
}
Run Code Online (Sandbox Code Playgroud)
以及活动中的代码
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) {
}
});
Run Code Online (Sandbox Code Playgroud)
我认为它可以是 JSON 响应,因为它有一个高级实例,但我不知道如何在代码中使用它。
我没有收到回复,这一切都正确吗?
问题在于 JSON 解析器并不期望将“电影”数据包装在 JSON 中的未命名根对象。
如果您可以更改服务器返回的 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
]
}
Run Code Online (Sandbox Code Playgroud)
如果您无法更改服务器的响应,可以通过几种方法在客户端进行处理。我只需创建另一个对象来映射到外部 JSON 对象,因此保持现有的 Movie 类不变,添加:
public class MovieResponse {
public Movie movie;
}
Run Code Online (Sandbox Code Playgroud)
然后更改 Retrofit 调用以使用 MovieResponse 而不是 Movie。然后你可以参考
movieResponse.movie
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7903 次 |
| 最近记录: |