【发布时间】: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