【问题标题】:My Firebase is not retrieving data from Firebase Database我的 Firebase 没有从 Firebase 数据库中检索数据
【发布时间】:2021-05-22 10:35:30
【问题描述】:

我见过很多其他类似的问题,也试过他们的方法,但还是不行。

我在 Click Listener 上的 getFirebase 函数:

 private void getFirebase() {
    firebaseDatabase = FirebaseDatabase.getInstance();
    reference = firebaseDatabase.getReference().child("Questions/m1");
    List<String> list = new ArrayList<>();
    Log.d("QuizFragment", "getfirebase");

    reference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d("QuizFragment", " Snapshots");
            list.add(dataSnapshot.getValue().toString());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("QuizFragment", "error  " + databaseError.toString());
        }
    });
    Log.d("QuizFragment","debug");
}

我的 Logcat 显示 getFirebase 然后直接调试消息。 我已经看到很多等待执行 SingleEvent 的答案,但我已经等了很多时间仍然没有显示。注意:我在模拟器上运行应用程序

【问题讨论】:

  • 我不确定我是否理解。您可以编辑您的问题以显示您的 Log.d 调用的 logcat 输出吗?
  • Log.d("QuizFragment", "error " + databaseError.toString()); 打印什么东西吗? onDataChangeonCancelled 甚至被触发了吗?请回复@AlexMamo
  • @AlexMamo 不,它没有打印任何东西。我猜它们没有被触发,因为它没有在上面打印任何东西

标签: java android firebase firebase-realtime-database


【解决方案1】:

addListenerForSingleValueEvent 将从本地磁盘缓存中获取数据。如果您的缓存中没有任何数据,您将不会获得任何数据。我相信这就是您无法进入 onDataChange() 的原因。所以首先像这样至少获取一次数据

 firebaseDatabase.getReference().child("Questions/m1")
    .get()
    .addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
        @Override
        public void onComplete(@NonNull Task<DataSnapshot> task) {
            if (!task.isSuccessful()) {
                Log.e("firebase", "Error getting data", task.getException());
            }
            else {
                Log.d("firebase", String.valueOf(task.getResult().getValue()));
            }
        }
    });

//then use cache data.  

reference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Log.d("QuizFragment", " Snapshots");
            list.add(dataSnapshot.getValue().toString());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Log.d("QuizFragment", "error  " + databaseError.toString());
        }
    });

【讨论】:

  • 那个完整的听众对我有用,顺便说一句,谢谢你的帮助,请问为什么我的问题得到了负1分?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2018-12-22
  • 1970-01-01
相关资源
最近更新 更多