通过 intent putString 将值传递给另一个 activity 会导致应用程序崩溃并出现 nullPointerException

Passing value to another activity via intent putString is crashing app with nullPointerException

我知道这里有很多这样的问题 - 但我相信我的问题是独一无二的。

我有一个模块列表视图,当用户选择一个模块时,另一个 activity 打开显示该模块的 'decks'。这需要第二个 activity 知道单击了哪个列表视图项。以下是我尝试实现这一目标的方法。

modulesListView.setOnItemClickListener((parent, view, position, id) -> {
        ModuleObject moduleObject = list.get(position);

        Intent intent = new Intent(FlashCards.this, FlashCardDecks.class);
        Bundle extras = new Bundle();
        extras.putString("EXTRA_MODULE_ID", moduleObject.getModuleId());
        extras.putString("EXTRA_MODULE_NAME", moduleObject.getModuleName());
        intent.putExtras(extras);
        startActivity(intent);

    });

在新的 activity 中,我访问 moduleName 并且我是这样的:

Bundle extras = getIntent().getExtras();
    assert extras != null;
    String moduleId = extras.getString("EXTRA_MODULE_ID");
    String moduleName = extras.getString("EXTRA_MODULE_NAME");

然后我使用 moduleName 来设置 Title 和 moduleId 来访问 firebase 并填充一个列表视图。都好。变量按应有的方式传递。

但在我的第二个 activity 中,我有对话框让用户使用以下参考从 firebase 数据库添加和删除 'decks'...

decksDatabaseReference = firebaseDatabase.getReference().child(userID).child("decks").child(moduleId);

使用此参考 - 用户可以在第二个 activity

中将 'decks' 添加到列表视图
        //create new deckObjet
        DeckObject deckObject = new DeckObject();
        //get unique id from firebase
        String deckId = decksDatabaseReference.push().getKey();
        //set unique id to deck object
        deckObject.setId(deckId);
        //add new deckObject to database
        decksDatabaseReference.child(deckId).setValue(deckObject);
        //refresh activity to show change in listview
        startActivity(new Intent(FlashCardDecks.this, FlashCardDecks.class));

这会使应用程序崩溃。但是当我下次打开该应用程序时,新牌组就在第二个 activity 中。所以我不知道为什么应用程序崩溃会出现空指针

这里是错误:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ec16358.examcompanion/com.ec16358.examcompanion.FlashCardDecks}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.BaseBundle.getString(java.lang.String)' on a null object reference

...

at com.ec16358.examcompanion.FlashCardDecks.onCreate(FlashCardDecks.java:48)

(FlashCardDecks 第 48 行 = String moduleId = extras.getString("EXTRA_MODULE_ID"); )

这有效

  if (getIntent().getStringExtra("EXTRA_MODULE_ID") != null && (getIntent().getStringExtra("EXTRA_MODULE_NAME") != null)){
            moduleId = bundle.getString("EXTRA_MODULE_ID");
            moduleName = bundle.getString("EXTRA_MODULE_NAME");
        }