我知道这里有很多这样的问题-但我相信我的问题很独特。
我有一个模块列表视图,当用户选择一个模块时,将打开另一个活动,显示该模块的“甲板”。这需要第二个活动来知道单击了哪个列表视图项。以下是我如何实现这一目标的方法。
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");
)
答案 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");
}