首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更新小部件时出现空列表异常

更新小部件时出现空列表异常
EN

Stack Overflow用户
提问于 2018-07-14 05:28:35
回答 2查看 92关注 0票数 1

我尝试将数据从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编写的

代码语言:javascript
复制
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();


        }

然后,这将更新小部件

代码语言:javascript
复制
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);
            }

有什么问题吗?有什么解决方案吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-14 06:04:22

我怀疑代码是异步执行的。您是否尝试过添加null检查,如下所示:

代码语言:javascript
复制
  @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);
                    **}**
            }
票数 0
EN

Stack Overflow用户

发布于 2018-07-15 21:36:55

要解决此问题,请使用以下代码:

代码语言:javascript
复制
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中的输出将为:

代码语言:javascript
复制
Amr Kamal / fsafsfa
Amr Kamal / hii
//And so on
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51333022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档