Android 向上操作:获取父活动的意图数据
在我的应用程序中,当单击up操作时,会出现空指针异常。导航正确地发生在父活动上。它将转到父活动的onCreate方法。它期望一个来自intent的值,它将为null。但不确定如何在按下up操作时设置intent值。谢谢你的帮助Android 向上操作:获取父活动的意图数据,android,nullpointerexception,Android,Nullpointerexception,在我的应用程序中,当单击up操作时,会出现空指针异常。导航正确地发生在父活动上。它将转到父活动的onCreate方法。它期望一个来自intent的值,它将为null。但不确定如何在按下up操作时设置intent值。谢谢你的帮助 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.Bundle.get(java.lang.String)'
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.os.Bundle.get(java.lang.String)' on a null object reference
活动1:
public class SignalListActivity extends AppCompatActivity {
public static final String EXTRA_CAT_ID = "sigcatid";
private DatabaseQuery dbQuery;
private Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signal_list);
setTitle("Cat chat");
try {
Toolbar mToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(mToolbar);
if(getSupportActionBar() != null){
getSupportActionBar().setTitle("Signal List");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
dbQuery = new DatabaseQuery(SignalListActivity.this);
final String cat = (String) getIntent().getExtras().get(EXTRA_CAT_ID);
List<Signal> signals = dbQuery.getSignalsNew(cat);
//getting recycler view
RecyclerView signalRecycler =(RecyclerView)findViewById(R.id.signal_recycler);
//GridLayoutManager mGrid = new GridLayoutManager(this, 2);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
signalRecycler.setLayoutManager(layoutManager);
// signalRecycler.setHasFixedSize(true);
SignalAdapter mAdapter = new SignalAdapter(SignalListActivity.this, signals);
signalRecycler.setAdapter(mAdapter);
mAdapter.setListener(new SignalAdapter.Listener() {
@Override
public void onClick(long id) {
Intent intent = new Intent(getApplicationContext(),SignalActivity.class);
intent.putExtra(SignalActivity.EXTRA_SIG_ID, id);
intent.putExtra(EXTRA_CAT_ID, cat);
startActivity(intent);
}
/*public void onClick(int position) {
Intent intent = new Intent(this, SignalActi.class);
intent.putExtra(PizzaDetailActivity.EXTRA_PIZZA_ID, position);
getActivity().startActivity(intent);
}*/
});
} catch(SQLiteException e) {
Toast toast = Toast.makeText(this, "Database unavailable", Toast.LENGTH_SHORT);
toast.show();
}
。。。
当从活动2中单击up按钮时,它将继续创建活动1的方法,并期望得到
最终字符串cat=(String)getIntent().getExtras().get(EXTRA_cat_ID)代码>如果您有两项活动
活动A
活动B
假设您现在处于活动B,当您按下后退按钮,导航回活动A,您在活动A中的生命周期将进入onResume(),而不是onCreate(),因为您的活动A仍在后堆栈中,它不需要再次重新创建活动。
因此,您将获得空值,正如您所期望的onCreate()回调,但不幸的是,这不会发生
要解决此问题,我们有3种选择:
1) 为两个活动添加SharedViewModel,在此ViewModel中使用可变LiveData,在活动B中添加数据,并在活动a中观察这些数据
2) 在两个活动之间使用广播接收器或回调接口
3) 开始新的意图从活动B到活动A,并在onCreate()中接收数据更改这两行:
(一)
而不是
getIntent().getExtras().get(EXTRA_CAT_ID);
getIntent().getExtras().get(EXTRA_SIG_ID);
(二)
而不是
getIntent().getExtras().get(EXTRA_CAT_ID);
getIntent().getExtras().get(EXTRA_SIG_ID);
因为getIntent()。getExtras()为空您可以共享这两个活动代码吗?@MustafaKhaled补充道thanks@Phantômaxx我的问题不是如何修复空指针异常,希望在关闭它之前完全阅读该问题否?这是什么引起的::java.lang.NullPointerException
?!令人惊讶的是,当在描述中只看到一个空指针异常时,却提供了这样的建议。任何方式都不适合争论。
getIntent().getExtras().get(EXTRA_SIG_ID);