在我的应用程序中,单击向上操作时,我得到了Null Pointer Exception。导航正确发生在父活动上。然后转到父活动的onCreate方法。它期望来自意图的值,并且它为null。但不确定如何在按下的向上动作中设置意图值。任何帮助表示赞赏。
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
public class SignalActivity extends AppCompatActivity {
public static final String EXTRA_SIG_ID = "signalId";
private DatabaseQuery dbQuery;
private Context context;
private String cat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signal);
dbQuery = new DatabaseQuery(SignalActivity.this);
Toolbar mToolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(mToolbar);
cat = (String) getIntent().getExtras().get(EXTRA_CAT_ID);
if(getSupportActionBar() != null){
getSupportActionBar().setTitle("Signal Details");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
try {
Long signalId = (Long) getIntent().getExtras().get(EXTRA_SIG_ID);
Signal signal = dbQuery.getSignal(signalId);
TextView name = (TextView)findViewById(R.id.name);
name.setText(signal.getName());
//Populate the drink description
TextView description = (TextView)findViewById(R.id.description);
description.setText(signal.getDescription());
TextView teaser = (TextView)findViewById(R.id.teaser);
teaser.setText(signal.getTeaser());
//Populate the drink image
ImageView photo = (ImageView)findViewById(R.id.photo);
int photoId = getResourseId(this,signal.getImage(), "drawable",getPackageName());
photo.setImageResource(photoId);
photo.setContentDescription(signal.getName());
} catch(SQLiteException e) {
Toast toast = Toast.makeText(this, "Database unavailable", Toast.LENGTH_SHORT);
toast.show();
}
...当从活动2单击向上按钮时,它将转到活动1的onCreate方法,并期望final String cat = (String) getIntent().getExtras().get(EXTRA_CAT_ID);
如果您有2个活动
假设您现在在活动B中,当您按下返回按钮,导航回活动A时,您在活动A中的生命周期将输入OnResume(), NOT onCreate(),因为您的Activity A仍在您的堆栈中,因此不需要再次重新创建活动。因此,您会得到空值,正如您期望的那样[
1)为两个活动添加一个SharedViewModel,在此ViewModel中使用MutableLiveData,在
活动B
中添加数据,并在活动A中观察这些数据。2)在两个活动之间使用广播接收器或回调接口。3)从
活动B
到活动A开始新的Intent,并在onCreate()中接收数据1)
getIntent().getStringExtra(EXTRA_CAT_ID);
代替
getIntent().getExtras().get(EXTRA_CAT_ID);
2)
getIntent().getLongExtra(EXTRA_SIG_ID,0);
代替
getIntent().getExtras().get(EXTRA_SIG_ID);
因为getIntent()。getExtras()为空