首页 > 解决方案 > 更新小部件时出现空列表异常

问题描述

我正在尝试将数据从 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);
            }

请问有什么问题?任何解决方案?

调试屏幕

在此处输入图像描述

标签: androidfirebase-realtime-database

解决方案


我怀疑代码是异步执行的。您是否尝试过添加这样的空检查:

  @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);
                    **}**
            }

推荐阅读