【发布时间】:2017-08-02 05:23:01
【问题描述】:
我正在使用改造 2 来查询 TMDB api。在我正在做的 call.enqueue 方法中
List<Movie> movies = response.body.getMovies();
当我运行时,我收到一条错误消息,指出方法 getMovies 产生了一个空指针异常
API接口
public interface ApiInterface {
@GET("/movie/now_playing")
Call<MainMovieNowPlayingResponse> getNowPlayingMovies(@Query("page")int
page, @Query("api_key") String API_KEY);
}
这是我的 ApiClient 类
public class ApiClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(){
if (retrofit == null){
retrofit = new Retrofit.Builder()
.baseUrl("https://api.themoviedb.org/3")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}}
这是我从片段中调用的入队方法
ApiInterface service = ApiClient.getClient().create(ApiInterface.class);
Call<MainMovieNowPlayingResponse> call = service.getNowPlayingMovies(1,API_KEY);
call.enqueue(new Callback<MainMovieNowPlayingResponse>() {
@Override
public void onResponse(Call<MainMovieNowPlayingResponse> call, Response<MainMovieNowPlayingResponse> response) {
if (response.code() == 200 && response.isSuccessful()){
movies = response.body().getResults();
}
}
@Override
public void onFailure(Call<MainMovieNowPlayingResponse> call,
Throwable t) {
}
});
我从作为选项卡视图一部分的片段的 onCreateView 方法调用它。
我得到的错误是response.body.getMovies() 调用中的NULL POINTER EXCEPTION。
我的错在哪里??
P.S:我故意没有放置模型,因为它们太长了,我不希望这个问题太长。我对模型进行了三次检查,所有模型都是正确的。都是带有公共 getter 和 setter 的私有变量。
在您对此投反对票之前,因为这是 NullPointer 的另一个问题,我知道空指针异常是什么。我只是在这段代码中找不到错误。
我的错误在哪里?
【问题讨论】:
-
你在邮递员或其他休息客户端检查过网址
-
为什么在响应代码中写
movies = response.body().getResults();而不是movies = response.body().getMovies(); -
尝试调试并检查response.body() 的值,如果为null,请检查response.errorBody() 的输出。你也许可以修复它。
-
是的,我什么都试过了。我尝试了记录、调试、删除与 api 调用相关的所有代码并再次编写它。没有任何效果
标签: java android nullpointerexception retrofit2