通过intent putString将值传递给另一个活动会使应用程序崩溃并返回nullPointerException

问题描述 投票:-1回答:1

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

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

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并填充listview。都好。变量按原样传递。

但在我的第二个活动中,我有一些对话框,允许用户使用以下引用从firebase数据库中添加和删除“decks”...

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

使用此引用 - 用户可以在第二个活动中将“decks”添加到listview

        //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。 null对象引用上的getString(java.lang.String)'

...

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

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

android android-intent firebase-realtime-database onitemclicklistener
1个回答
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");
        }
© www.soinside.com 2019 - 2024. All rights reserved.