【问题标题】:RecyclerView image from Firebase fails to load for one activity out of three [duplicate]来自 Firebase 的 RecyclerView 图像无法加载三个活动中的一个 [重复]
【发布时间】: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 方法在主线程上运行。也许问题出在查询火上

标签: android firebase-realtime-database android-recyclerview android-glide


【解决方案1】:
W/RecyclerView: No adapter attached; skipping layout

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

【讨论】:

  • 是的。因为所有 3 项活动都很少执行。因此,在一次执行中,只有其中 2 个随机工作。不知道为什么只有一个(三个中的任何一个)不起作用。
  • 你能添加更多代码吗
  • 谢谢 .... 您能否更具体地说明代码的哪一部分会有所帮助?
  • 调试应用时这个代码块会运行吗?
  • 没有。流未进入“onDataChange”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2019-01-25
  • 1970-01-01
相关资源
最近更新 更多