空对象引用上的 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
尚未初始化,因为您仅在传递给 JsonArrayRequest
的 Response.Listener
中初始化它。因此,如果您快速离开 Activity
.
,就会出现异常
您可以通过使用默认值初始化它或进行 null
检查来解决它。我还建议阅读 Android 中的 saving state,因为你的方法不起作用。
我自己没有经历过这种崩溃,但当我检查 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
尚未初始化,因为您仅在传递给 JsonArrayRequest
的 Response.Listener
中初始化它。因此,如果您快速离开 Activity
.
您可以通过使用默认值初始化它或进行 null
检查来解决它。我还建议阅读 Android 中的 saving state,因为你的方法不起作用。