Java arrayList是空的Firebase数据库

Java arrayList是空的Firebase数据库,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我已经看到了一些与此相关的答案,但从一周的时间里,我还不知道如何做到这一点。 数组列表为空 我尝试使用一个查询,使用这个函数,但无法得到任何简单或更好的解决方案 mUserDatabase=FirebaseDatabase.getInstance().getReference().child(uid).child("Medicines"); mUserDatabase.addValueEventListener(new ValueEventListener() { @Override

我已经看到了一些与此相关的答案,但从一周的时间里,我还不知道如何做到这一点。 数组列表为空 我尝试使用一个查询,使用这个函数,但无法得到任何简单或更好的解决方案

mUserDatabase=FirebaseDatabase.getInstance().getReference().child(uid).child("Medicines");

mUserDatabase.addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {

        for (DataSnapshot childDataSnapshot2 : childDataSnapshot.getChildren()) { 
              //GET MEDICINE NAME
               arrayList.add(childDataSnapshot2.getKey());

            }}

    @Override
    public void onCancelled(DatabaseError databaseError) {}});

要从数据库架构中获取键和值,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference medicinesRef = rootRef.child(uid).child("Medicines");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = ds.getKey();
            String altisgpt = ds.child("ALTISGPT").getValue(String.class);
            Log.d(TAG, key + " -> " + altisgpt);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
medicinesRef.addListenerForSingleValueEvent(valueEventListener);
logcat中的输出将为:

2019-1-27 -> 72 u/L
同样,还可以获得其他属性的值。除此之外,您还可以使用相同的属性创建
Medicine
(POJO)类,将
Medicines
下的每个节点映射到
Medicine
类型的对象。这样,您只需创建一个
Medicine
对象列表,并根据需要使用它。请不要忘记检查我在以下帖子中的答案:


首先尝试调试dataSnapshot.exist()是否正确。如果是,则跟踪它有多少个孩子!如果这些都是真的,那么你的arrayList必须是字符串类型,你会在里面得到一堆值!如果你到目前为止都在正确的轨道上,但仍然没有得到它,然后,请在下面分享您的数据库层次结构我使用的Toast,它Toast工作正常但速度慢。但在arraylist中,它是空的或大小是0谢谢@AlexMamo和Pushpendra我添加了that@Rohitgupta您可能在等待异步任务完成之前尝试使用该任务的结果。当您说“toast工作正常但速度慢”时,这是因为您的客户机必须进行身份验证,查询数据库中
/someUid/Medicines
下的所有数据,并在显示toast之前解析结果。您应该在等待查询数据时显示一段时间。我将字符串键设置为全局键,然后尝试在toast.makeText(this,key,toast.LENGTH_SHORT).show()之外使用toast;但吐司是“BLANK@Rohitgupta在您的示例中,
在设置值之前就被“烤”了。您不是在等待数据被查询和解析。@Rohitgupta samthecodingman是对的。这就是我在回答的最后给你举这个例子的原因。你现在解决问题了吗?