面临改型api的问题。错误:java.lang.NullPointerException:尝试对空对象引用调用接口方法

面临改型api的问题。错误:java.lang.NullPointerException:尝试对空对象引用调用接口方法,java,android,nullpointerexception,retrofit,Java,Android,Nullpointerexception,Retrofit,我是新的改装API,我正在努力与它。我跟随,并能够从中获取数据,并将其显示在列表视图中。但是当我试图从中获取数据时,我得到了下面的错误 下面是在列表视图中显示StackExchange url中的“标题”的代码(这工作正常) main活动 public class MainActivity extends ListActivity implements Callback<StackOverflowQuestion> { ArrayAdapter<Question>

我是新的改装API,我正在努力与它。我跟随,并能够从中获取数据,并将其显示在列表视图中。但是当我试图从中获取数据时,我得到了下面的错误

下面是在列表视图中显示StackExchange url中的“标题”的代码(这工作正常)

main活动

public class MainActivity extends ListActivity implements Callback<StackOverflowQuestion> {

    ArrayAdapter<Question> madapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        madapter=new ArrayAdapter<Question>(this,android.R.layout.simple_list_item_1,android.R.id.text1,new ArrayList<Question>());
        setListAdapter(madapter);
        Retrofit retrofit= new Retrofit.Builder()
            .baseUrl("http://api.stackexchange.com")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
        StackOvreflowAPI stackOverflowAPI = retrofit.create(StackOvreflowAPI.class);

        Call<StackOverflowQuestion> call = stackOverflowAPI.load();
        call.enqueue(this);
    }

    @Override
    public void onResponse(Response<StackOverflowQuestion> response, Retrofit retrofit) {

        ArrayAdapter<Question> adapter = (ArrayAdapter<Question>) getListAdapter();
        adapter.clear();
        adapter.addAll(response.body().items);
    }

    @Override
    public void onFailure(Throwable t) {

    }
}
StackOverflowQuestion

public class Question {
    public String name;

    @Override
    public String toString() {
        return (name);
    }
}
public class StackOverflowQuestion {
    List<Question> items;
}
我只更改了URL、接口和模型类

在主活动中所做的更改:

Retrofit retrofit= new Retrofit.Builder()
            .baseUrl("https://api.themoviedb.org")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
public interface StackOvreflowAPI {
    @GET("/3/movie/popular?api_key=ab5aee0b18da89dd9e026d35754c24f1")
    Call<StackOverflowQuestion> load();
}
public class Question {
    public String overview;

    @Override
    public String toString() {
        return (overview);
    }
}
使用
.baseUrl(“https://api.themoviedb.org“”
而不是
.baseUrl(“”https://api.stackexchange.com)

在界面中所做的更改:

Retrofit retrofit= new Retrofit.Builder()
            .baseUrl("https://api.themoviedb.org")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
public interface StackOvreflowAPI {
    @GET("/3/movie/popular?api_key=ab5aee0b18da89dd9e026d35754c24f1")
    Call<StackOverflowQuestion> load();
}
public class Question {
    public String overview;

    @Override
    public String toString() {
        return (overview);
    }
}
标题
更改为
概述

但运行此应用程序时,应用程序会崩溃,并出现以下错误:

java.lang.NullPointerException: Attempt to invoke interface method    
    'java.lang.Object[] java.util.Collection.toArray()' on a null object reference.
FATAL EXCEPTION: main
    Process: com.example.maver_000.practise_retrofit, PID: 4270
    java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
    at java.util.ArrayList.addAll(ArrayList.java:188)
    at android.widget.ArrayAdapter.addAll(ArrayAdapter.java:195)
    at com.example.maver_000.practise_retrofit.MainActivity.onResponse(MainActivity.java:40)
    at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run(ExecutorCallAdapterFactory.java:86)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5294)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

检查TMDB API返回的响应结构,我认为“overview”可能不是直接的根对象,因此响应的Gson转换可能会失败


查看API响应,将StackOverFlowQuestion类的变量名更改为results或添加@SerializedName以匹配json名称,然后它应该可以工作

检查TMDB API返回的响应结构,我认为“overview”可能不是直接的根对象,因此响应的Gson转换可能会失败


查看API响应,将StackOverFlowQuestion类的变量名更改为results或添加@SerializedName以匹配json名称,那么它应该可以工作

您能验证API调用是否成功吗?您可以通过选中call.Issuccessful执行onresponse方法来执行此操作。您可以打印stacktrace吗?@AbhinavNair response.isSuccess()返回true,response=null为true,response.errorBody()=null为false。我应该更改什么才能成功获取数据?您能否验证api调用是否成功?您可以通过选中call.Issuccessful执行onresponse方法来执行此操作。您可以打印stacktrace吗?@AbhinavNair response.isSuccess()返回true,response=null为true,response.errorBody()=null为false。我应该更改什么才能成功获取数据?向变量项添加@SerializedName(“结果”)。现在开始工作了。非常感谢。脱帽致敬,真的帮了我的忙。感谢将@SerializedName(“结果”)添加到变量项。现在开始工作了。非常感谢。脱帽致敬,真的帮了我的忙。谢谢