空对象引用上的 onSaveInstanceState

onSaveInstanceState on a null object reference

我自己没有经历过这种崩溃,但当我检查 Firebase Crashlytics 时,有些用户确实遇到了这种情况。

所以我有一个 Recyclerview 并且这一小段代码确实保存了位置。

LinearLayoutManager layoutManager;
Parcelable state;
    @Override
    protected void onPause() {
        super.onPause();
        state = layoutManager.onSaveInstanceState();
    }
    public void jsonrequest() {

        request = new JsonArrayRequest(JSON_URL, response -> {
            JSONObject jsonObject;
            lstUserCard.clear();
            for (int i = 0; i < response.length(); i++) {
                try {
                    jsonObject = response.getJSONObject(i);
                    UserCard userCard = new UserCard();
                    userCard.setfName(jsonObject.getString("fname"));
                    userCard.setDescription(jsonObject.getString("description"));
                    lstUserCard.add(userCard);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }


            RecyclerViewAdapter myadapter = new RecyclerViewAdapter(this, lstUserCard) ;
            layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
            recyclerView.setLayoutManager(layoutManager);
            recyclerView.setAdapter(myadapter);
            layoutManager.onRestoreInstanceState(state);
        }, error -> {
            return;
        });


        requestQueue = Volley.newRequestQueue(DashBoardActivity.this);
        requestQueue.add(request);
    }

这对我来说很好,但对某些用户来说确实会崩溃。

Firebase 中的错误:

Attempt to invoke virtual method 'android.os.Parcelable androidx.recyclerview.widget.LinearLayoutManager.onSaveInstanceState()' on a null object reference com.app.myapp.DashBoardActivity.onPause

错误行是:

state = layoutManager.onSaveInstanceState();

方法jsonrequest,在onResume()中调用,onCreate里面没有任何东西。

我是否必须在 onCreate 中添加一些代码?想看看一些建议。提前致谢。

调用 onPause() 时,您的 layoutManager 尚未初始化,因为您仅在传递给 JsonArrayRequestResponse.Listener 中初始化它。因此,如果您快速离开 Activity.

,就会出现异常

您可以通过使用默认值初始化它或进行 null 检查来解决它。我还建议阅读 Android 中的 saving state,因为你的方法不起作用。