【问题标题】:How to show a specific child value from Firebase in Android?如何在 Android 中显示来自 Firebase 的特定子值?
【发布时间】:2021-05-01 08:40:30
【问题描述】:

DatabaseReference 参考 = FirebaseDatabase.getInstance().getReference().child("User Allergens").child(uid);

我需要在 .child(UID) 之后添加什么? 我的代码:

    ArrayList<String> list = new ArrayList<>();
    ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.list_item, list );
    listView.setAdapter(adapter);

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("User Allergens").child(uid);
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren() ){
                list.add(snapshot.getValue().toString());
            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });

picture of data structure in firebase, have a look for a clear view.

【问题讨论】:

  • 我做了,我在这里添加了代码,请你看看吗?
  • 显示的数据我有 {A1=Lactose } 但我只想显示 Lactose

标签: java android firebase firebase-realtime-database android-arrayadapter


【解决方案1】:

正如我在您的屏幕截图中看到的,在以下参考中:

FirebaseRoot -> User Allergens -> UID

您有几个 String 类型的子代,其中包含一些值,例如 LactoseGlutenSugar。要获取所有这些值并在您的适配器中使用它们,请使用以下代码行:

ListView listView = (ListView) findViewById(R.id.list_view);
List<String> list = new ArrayList<>();
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, list);
listView.setAdapter(arrayAdapter);
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("User Allergens").child(uid);
uidRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            for (DataSnapshot alergenSnapshot : task.getResult().getChildren()) {
                String alergen = alergenSnapshot.getValue(String.class);
                list.add(alergen);
            }
            adapter.notifyDataSetChanged();
        } else {
            Log.d(TAG, task.getException().getMessage()); //Don't ignore potential errors!
        }
    }
});

如果task.getException().getMessage() 没有出现错误,则上述代码的结果将是一个 ListView,其中填充了来自 Firebase 实时数据库的过敏原名称。

【讨论】:

  • 很高兴听到这个消息:)
  • 知道它有效,我现在请您通过单击投票箭头下方左侧的复选标记 (✔️) 来接受我的回答。应将颜色更改为绿色。我真的很感激。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多