android - 更新小部件时出现空列表异常
问题描述
我正在尝试将数据从 firebase 传递到小部件,数据显示在调试中,但是每次我将参数传递给小部件时应用程序都会崩溃,这是错误:
java.lang.NullPointerException:尝试在 com.example.amrkamal.textme.MainActivity$4.onDataChange(MainActivity.java: 224)在 com.google.android.gms.internal.firebase_database.zzfc.zza(未知来源:13)在 com.google.android.gms.internal.firebase_database.zzgx.zzdr(未知来源:2)在 com.google .android.gms.internal.firebase_database.zzhd.run(Unknown Source:71) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android .os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os .RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com。android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
我取消了 List<MessageModel> chatModelsArrayList;
这是我的代码,我在 onCreate 中编写了所有这些
chatModelsArrayList = new ArrayList<>();
chatModelsArrayList.clear();
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child("messages").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
MessageModel usersModels = new MessageModel(
snapshot.child("name").getValue().toString(),
snapshot.child("text").getValue().toString());
chatModelsArrayList.add(usersModels); }
updateWidgetScreen(chatModelsArrayList);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Toast.makeText(getApplicationContext(), R.string.AddedTowidget, Toast.LENGTH_LONG).show();
}
然后这个更新小部件
private void updateWidgetScreen(List<MessageModel> chatModelsList) {
String users = getString(R.string.messages_list_name);
for (MessageModel user : chatModelsList) {
users = users
+ user.getName() + ": "
+ user.getText() + " \n";
}
WidgetUpdateService.startWidgetUpdate(this, users);
}
请问有什么问题?任何解决方案?
解决方案
我怀疑代码是异步执行的。您是否尝试过添加这样的空检查:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
**if (snapshot != null)**
**{**
MessageModel usersModels = new MessageModel(
snapshot.child("name").getValue().toString(),
snapshot.child("text").getValue().toString());
chatModelsArrayList.add(usersModels); }
updateWidgetScreen(chatModelsArrayList);
**}**
}
推荐阅读
- excel - 在 Excel VBA 中查找 Object/ArrayList 的最后一个元素
- c++ - 分发我的代码时出现 gnuplot 问题?
- c - 程序给出正确的输出,但在 Hackerrank 上显示运行时错误
- swiftui - 循环遍历对象列表,尝试创建列表视图。看不到对象属性(只有_self)
- javascript - 如何等待两个异步函数结束?
- r - 通过迭代 tibbles 列表来修改列
- javascript - 如何使用 puppeteer 或 javascript 使用 jsaction preventdefault 脚本单击()元素?
- javascript - 节点中的 GPU 使用指标
- vim - 在vim中查找前一个字符
- mysql - MySQL NTILE 桶选择