来自 Firebase 的 RecyclerView 图像无法加载三个活动中的一个 [重复]

Posted

技术标签:

【中文标题】来自 Firebase 的 RecyclerView 图像无法加载三个活动中的一个 [重复]【英文标题】:RecyclerView image from Firebase fails to load for one activity out of three [duplicate] 【发布时间】:2021-10-21 05:13:52 【问题描述】:

我有一个调用 3 个活动的 MainActivity -

公共类 MainActivity 扩展 AppCompatActivity

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_choose_main);

    CardView c1 = findViewById(R.id.card1);
    c1.setOnClickListener(view -> startActivity(new Intent(this, QuoteActivity.class)));

    CardView c2 = findViewById(R.id.card2);
    c2.setOnClickListener(view -> startActivity(new Intent(this, ReadingActivity.class)));

    CardView c3 = findViewById(R.id.card3);
    c3.setOnClickListener(view -> startActivity(new Intent(this,MotivationActivity.class)));

.....

所有 3 个活动都使用 RecyclerView.Adapter 从 Firebase 存储加载图像和文本。 问题是 3 个活动之一的任意图像加载失败,并出现以下错误 -

I/FIAM.Display:绑定到活动:FirebaseLibrary.ReadingActivity I/FIAM.Headless:设置显示事件组件 W/RecyclerView:没有附加适配器;跳过布局 V/FA:不活动,与服务断开连接

哪个活动不起作用是绝对随机的。如果我删除一项活动,则剩余 2 项中的一项将失败。使用断点,我可以看到它没有进入 onDataChange -

private void GetDataFromFirebase()

    Query query = myref.child("quote");
    query.addValueEventListener(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
            ClearAll();
            ArrayList<Messages> randommessagesList = new ArrayList<>();
            for(DataSnapshot snapshot1 : dataSnapshot.getChildren())
                Messages messages = new Messages();

                messages.setImageUrl(Objects.requireNonNull(snapshot1.child("image").getValue()).toString());
                messages.setName(Objects.requireNonNull(snapshot1.child("name").getValue()).toString());

                messagesList.add(messages);
            
            int messagesCount = messagesList.size();
            int randomNumber = new Random().nextInt(messagesCount);

            randommessagesList.add(messagesList.get(randomNumber));

            recyclerAdapter = new RecyclerAdapter(getApplicationContext(), randommessagesList);
            quoterecyclerview.setAdapter(recyclerAdapter);
            recyclerAdapter.notifyDataSetChanged();
        

        @Override
        public void onCancelled(@NonNull DatabaseError error) 

        
    );

有什么帮助吗?

已解决: 正如我所料,问题出在 Firebase 中仍处于 Beta 版的新应用检查器上。使用 Playstore 发布的应用程序可以访问 Firebase,但在通过 android Studio 安装以进行测试时出现问题。刚刚删除了用于测试的应用检查初始化...

【问题讨论】:

您担心“未连接适配器;跳过布局”? 是的。不知道为什么它会随机发生在 3 个活动中。 您不应该在后台线程中设置适配器。请检查重复的 tp 看看如何解决这个问题。 你是对的。如果这样做,我看不到错误,但页面是空白的。我真的不怀疑活动中的代码可以正常工作。我已将相同的代码复制到 3 个活动中。问题在于每次执行时它随机只适用于 2 个活动。对于另一个执行,甚至没有输入 onDataChange。 OnDataChange 方法在主线程上运行。也许问题出在查询火上 【参考方案1】:
W/RecyclerView: No adapter attached; skipping layout

也许这行显示了一个问题。你确定你已经正确设置了回收器视图适配器吗?

【讨论】:

是的。因为所有 3 项活动都很少执行。因此,在一次执行中,只有其中 2 个随机工作。不知道为什么只有一个(三个中的任何一个)不起作用。 你能添加更多代码吗 谢谢 .... 您能否更具体地说明代码的哪一部分会有所帮助? 调试应用时这个代码块会运行吗? 没有。流未进入“onDataChange”。

以上是关于来自 Firebase 的 RecyclerView 图像无法加载三个活动中的一个 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

离子 |未显示来自 Firebase 的结果

接收来自两个 Firebase 项目的一个 Android 应用的推送通知

Firebase 消息 - 无法接收来自订阅的通知

来自 firebase 实时数据库的重复数据

Firebase 通过 curl 命令发送推送通知有效,但不是来自 firebase 控制台

Flutter:如何显示来自 Firebase 的文本?