Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试调用虚拟方法失败:应用程序崩溃_Java_Android_Retrofit - Fatal编程技术网

Java 尝试调用虚拟方法失败:应用程序崩溃

Java 尝试调用虚拟方法失败:应用程序崩溃,java,android,retrofit,Java,Android,Retrofit,在尝试运行应用程序时,它崩溃并显示“尝试调用虚拟方法”。下面是在logcat中发现的错误 FATAL EXCEPTION: main Process: com.example.sayantan.moviebugs, PID: 1694 java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.example.sayantan.moviebugs.model.Movies

在尝试运行应用程序时,它崩溃并显示“尝试调用虚拟方法”。下面是在logcat中发现的错误

FATAL EXCEPTION: main
    Process: com.example.sayantan.moviebugs, PID: 1694
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.example.sayantan.moviebugs.model.MoviesResponse.getResults()' on a null object reference
            at com.example.sayantan.moviebugs.MainActivity$2.onResponse(MainActivity.java:132)
            at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:168)
            at android.app.ActivityThread.main(ActivityThread.java:5885)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:797)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:687)
下面是
main_activity.java
文件中的Json代码片段:

eCall<MoviesResponse> call = apiService.getPopularMovies(BuildConfig.THE_MOVIE_DB_API_TOKEN);
        call.enqueue(new Callback<MoviesResponse>() {
            @Override
            public void onResponse(Call<MoviesResponse> call, Response<MoviesResponse> response) {
                List<Movie> movies = response.body().getResults();

                //Collections.sort(movies, Movie.BY_NAME_ALPHABETICAL);
                recyclerView.setAdapter(new MoviesAdapter(getApplicationContext(), movies));
                recyclerView.smoothScrollToPosition(0);
                if (swipeContainer.isRefreshing()){
                    swipeContainer.setRefreshing(false);
                }
eCall call=apiService.getPopularMovies(BuildConfig.THE_MOVIE\u DB\u API\u令牌);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
List movies=response.body().getResults();
//收藏。分类(电影,电影。按名称和字母顺序排列);
setAdapter(新的MoviesAdapter(getApplicationContext(),movies));
recyclerView.smoothScrollToPosition(0);
if(swipContainer.isRefreshing()){
swipContainer.setRefreshing(false);
}
以下是模型文件中的代码段:

  public void setPage(int page) {
    this.page = page;
}

public List<Movie> getResults()
{
    return results;
}

public List<Movie> getMovies() {
    return results;
}

public void setResults(List<Movie> results) {
    this.results = results;
}
public void设置页(int页){
this.page=page;
}
公共列表getResults()
{
返回结果;
}
公共列表getMovies(){
返回结果;
}
公共void setResults(列出结果){
这个结果=结果;
}

当有响应时会调用改装onResponse,这意味着当出现错误时也会调用它。在这种情况下,主体(getBody())为null,如果您尝试使用它,将导致java.lang.NullPointerException

如何在您的案例中使用改装的示例:

if (response.isSuccessful())
{
    List<Movie> movies = response.body().getResults();

    ... // Other code
}
else
{
    Log.d("SOME_TAG", "Error code: " + response.code());
}
if(response.issusccessful())
{
List movies=response.body().getResults();
…//其他代码
}
其他的
{
Log.d(“SOME_标记”,“错误代码:”+response.code());
}

response.body()
为空。请检查您是否从服务器获得了有效响应。否,我没有从服务器获得有效响应如何修复此问题?这完全取决于您从中获取数据的服务器的行为。您的初始请求是否正确?远程API是否也是由您创建的,如果是,是否可能是系统中的错误API?我想知道java上下文中的
virtual method
的含义是什么谢谢。这很有效。但我想我的连接有问题。知道如何解决吗?不能真正帮助你解决连接问题。我通常使用Postman调试服务器调用的问题: