Android 向上操作:获取父活动的意图数据

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)'

在我的应用程序中,当单击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)' 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);