我尝试将数据从firebase传递到widget,数据在调试中显示,但每次我将参数传递给widget时,应用程序都会崩溃,以下是错误:
java.lang.NullPointerException:尝试对位于com.google.android.gms.internal.firebase_database.zzfc.zza(Unknown的com.example.amrkamal.textme.MainActivity$4.onDataChange(MainActivity.java:224)的空对象引用调用虚方法'java.lang.String java.lang.Object.toString()‘。来源:13)位于com.google.android.gms.internal的来源:2)android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at java.lang.reflect.Method.invoke(本地方法) at com.android.internal的android.app.ActivityThread.main(ActivityThread.java:6494) (本地方法)的.firebase_database.zzhd.run(未知源:71).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);
}
有什么问题吗?有什么解决方案吗?
发布于 2018-07-14 06:04:22
我怀疑代码是异步执行的。您是否尝试过添加null检查,如下所示:
@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);
**}**
}
发布于 2018-07-15 21:36:55
要解决此问题,请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference messagesRef = rootRef.child("messages");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<MessageModel> chatModelsArrayList = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
MessageModel messageModel = ds.getValue(MessageModel.class);
chatModelsArrayList.add(messageModel );
Log.d("TAG", messageModel.getName() + " / " + messageModel.getText());
}
//Call method to update widget
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
messagesRef.addListenerForSingleValueEvent(valueEventListener);
logcat中的输出将为:
Amr Kamal / fsafsfa
Amr Kamal / hii
//And so on
https://stackoverflow.com/questions/51333022
复制相似问题