加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Retrofit返回null值

发布时间:2020-12-15 04:31:52 所属栏目:Java 来源:网络整理
导读:我正在使用Retrofit,而且我在 Android中非常棒. 我的JSON响应 { "movie": { "_id": "568661682d33bca267fdf81b","poster_path": "https://image.tmdb.org/t/p/w154/xHfhQIK4BNlsGv5Ylx8mVq0hJT1.jpg","adult": false,"overview": "","release_date": "2015-0
我正在使用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","genre_ids": [
        53,12
    ]
}

如果您无法改变服务器的响应,可以通过几种方法在客户端处理它.我只是创建另一个对象来映射到外部JSON对象,因此将现有的Movie类保留为原样,添加:

public class MovieResponse {
 public Movie movie;
}

然后更改Retrofit调用以使用MovieResponse而不是Movie.
然后你可以参考

movieResponse.movie

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读