为什么Retrofit入队会产生空点异常?

时间:2019-06-07 07:17:55

标签: android json nullpointerexception retrofit2

我创建了自己的测试JSON,并尝试使用Android将其合并到我的Retrofit应用程序中,但是由于某些原因,我似乎无法理解尝试使用Null Point Exception来获取JSON

我创建了看起来像这样的JSON:

[{"date":"2019/01/01","availability":"available"},{"date":"2019/01/02","availability":"closed"},{"date":"2019/01/03","availability":"closed"}]

依此类推...

然后,我同时设置了Retrofit代码和Room数据库代码。

这是来自主类的Retrofit代码:

public class MainActivity extends AppCompatActivity {

MainRepository mainRepository;
Call<List<RFVariables>> getRFPosts;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate( savedInstanceState );
    setContentView( R.layout.activity_main );

    getRFPosts = mainRepository.getGetPosts();

    getRFPosts.enqueue( new Callback<List<RFVariables>>() {
        @Override
        public void onResponse(Call<List<RFVariables>> call, Response<List<RFVariables>> response) {
            List<RFVariables> myResponse = response.body();

            if(myResponse != null) {
                for(RFVariables item: myResponse) {
                    Log.d("TAG", item.getDate());

                }
            }

        }

        @Override
        public void onFailure(Call<List<RFVariables>> call, Throwable t) {

        }
    } );

它在getRFPosts = mainRepository.getGetPosts();行崩溃,并显示错误Attempt to invoke interface method 'void retrofit2.Call.enqueue(retrofit2.Callback)' on a null object reference at com.slothmode.sunnyatsea.MainActivity.onCreate(MainActivity.java:25)

存储库代码如下:

private Retrofit retrofitObject;
private RFCalls retrofitRepository;
private Call<List<RFVariables>> getPosts;

public MainRepository(Application application) {
    this.retrofitObject = new Retrofit.Builder()
            .baseUrl( "https://api.myjson.com/bins/" )
            .addConverterFactory( GsonConverterFactory.create() )
            .build();

    this.retrofitRepository = this.retrofitObject.create( RFCalls.class );
    this.getPosts = this.retrofitRepository.findPosts();
}

public Call<List<RFVariables>> getGetPosts() {
    return getPosts;
}

我之前已经成功完成了此操作,所以不确定这次有什么问题。好像是我其他成功项目的精确副本。我想念什么?让我知道是否还有更多代码应显示。提前致谢。真的卡在这里。

1 个答案:

答案 0 :(得分:0)

在执行此操作之前,您尚未初始化MainRepository:

getRFPosts = mainRepository.getGetPosts();

因此,请在尝试使用mainRepository类之前对其进行初始化。

mainRepository = new MainRepository(getApplicationContext());

在此处查看有关NullPointerException的更多信息:

How to fix NullPointerException?