当前位置: 首页 > 面试题库 >

Firebase无法将检索到的数据保存到ArrayList

壤驷瑾瑜
2023-03-14
问题内容

检索数据有效,但是我无法将检索到的数据保存到ArrayList中。在“
onDataChanged()”方法之后,ArrayList“配置文件”似乎具有2个值,但在return语句中它具有0个值。

static List<Profile> profiles = new ArrayList<Profile>();
static DatabaseReference dbr;

public static List<Profile> loadProfiles(Context context){

    dbr = FirebaseDatabase.getInstance().getReference().child("users").child("hiring");
    dbr.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            //String value = dataSnapshot.getValue(String.class);
            //Log.d("hello", "Value is: " + value);
            List<Profile> profiles2 = new ArrayList<>();

                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Profile profile = snapshot.getValue(Profile.class);
                    //Log.d("hello", profile.getCompanyName());
                    profiles2.add(profile);

                }

                profiles = profiles2;
                dbr.removeEventListener(this);
        }




        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.w("hello", "Failed to read value.", error.toException());
        }
    });

    return profiles;

}

问题答案:

您现在无法返回尚未加载的内容。换句话说,您不能简单地profilesonDataChange()方法之外返回列表,因为它总是empty由于该方法的异步行为而引起的。这意味着,当您尝试返回该方法之外的结果时,数据尚未完成从数据库的加载,因此无法访问。

一个快速的解决这个问题是使用的profiles唯一的内部列表onDataChange()方法,否则我建议你看我anwser从这个最后的部分
,其中我已经解释了如何可以使用自定义的回调来完成。您也可以观看此
视频 ,以更好地理解。



 类似资料:
  • 这是使用电子邮件密码注册帐户的所有代码,保存验证电子邮件,将用户数据保存到Firestore数据库中。只有Firestore数据库无法运行。 else { Toast.makeText(register.this, “Error ! ” task.getException().getMessage(), Toast.LENGTH_SHORT).show();progressBar.setVisib

  • 我有一个小应用程序,用户可以根据球员最近在各种运动中的表现,对他们进行升票或降票。 当upvote按钮当前被点击时,投票者的UID(通过Google登录)应该被推入被投票的相应玩家的数据库中。像这样: 下面是执行Firebase工作的代码。我相信我错了其中一句台词。

  • 我想在Firebase中根据Firebase本地服务器时间和日期保存数据,而不是本地系统日期,如果用户的移动电话日期错误,则可能是错误的。然后我想通过像SQL查询一样应用日期查询(给我两个日期之间的数据并添加特定的colmn)来检索它。我如何在使用Java的安卓系统中做到这一点呢?

  • 我开始构建一些非常简单的应用程序,我想我已经掌握了如何在android Studio中创建基础知识。我一辈子都搞不清楚的是为什么我不能把数据发送到我的firebase实时数据库。 这是一个非常简单的应用程序,我试图让它目前的工作(因为我不能在更丰富的一个)--只需要一个按钮,应该发送“你好,世界!”

  • 我在Android应用程序中使用Firebase auth和实时数据库。这是我在Firebase函数中使用的代码,用于在用户使用电子邮件注册应用程序时将用户电子邮件保存到实时数据库中: 当我在android应用程序中注册用户时(我使用Firebase的内置注册UI),它不会在Functions日志中显示错误: 我的问题是,虽然日志中没有错误,并且用户已添加到Firebase身份验证部分,但实时数据

  • 这是我的第二个版本,我试图从Firebase检索代码,并用它做一些事情。这是我的第二种方式: 这将崩溃,并出现错误代码: 未能将类型“__NSCFString”(0x10A77F4A0)的值强制转换为“NSDictionary”(0x10A780288)。在“更新”行。这是我的第一次尝试: 打印更多数据: -路径通道引用:可选(https://x.com/channels/-kegkajavh6u