通过意图putString将值传递给另一个活动导致应用程序崩溃,并带有nullPointerException

时间:2019-04-21 19:41:08

标签: android android-intent firebase-realtime-database onitemclicklistener

我知道这里有很多这样的问题-但我相信我的问题很独特。

我有一个模块列表视图,当用户选择一个模块时,将打开另一个活动,显示该模块的“甲板”。这需要第二个活动来知道单击了哪个列表视图项。以下是我如何实现这一目标的方法。

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

    });

在新活动中,我这样访问moduleName和ID:

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

然后我使用moduleName设置setTitle和moduleId来访问firebase并填充列表视图。都好。变量按原样传递。

但是在第二个活动中,我有一个对话框,允许用户使用以下参考从Firebase数据库中添加和删除“甲板” ...

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

使用此参考-用户可以在第二个活动中将“卡片组”添加到列表视图中

        //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));

这将使应用程序崩溃。但是,当我下次打开该应用程序时,第二个活动中便是新的平台了。所以我不知道为什么应用崩溃了

这是错误:

  

java.lang.RuntimeException:无法启动活动ComponentInfo {com.ec16358.examcompanion / com.ec16358.examcompanion.FlashCardDecks}:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String android.os .BaseBundle.getString(java.lang.String)'在空对象引用上

     

...

     

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

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

1 个答案:

答案 0 :(得分:0)

这有效

  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");
        }