Java Firebase通过身份验证检索阵列名称和阵列

Java Firebase通过身份验证检索阵列名称和阵列,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,如何实现对基于帐户的数组的检索,当前当我运行以下代码时,它不会检索任何内容。我是一个完全的初学者,我试着看其他的例子,但我的不同于其他的例子。我的目标是检索属于该用户的所有数组。现在我只想返回这些项目的名称,但稍后我还想使用数组,因此第一个用户将有: Fruit = ["apple", "banana", "mango" ] Veg = ["tomato", "potato", "cabbage" ] 代码: 更新: 我按照你的建议做了更改,但是“水果”和“蔬菜”没有出现在微调器中,你能给我一

如何实现对基于帐户的数组的检索,当前当我运行以下代码时,它不会检索任何内容。我是一个完全的初学者,我试着看其他的例子,但我的不同于其他的例子。我的目标是检索属于该用户的所有数组。现在我只想返回这些项目的名称,但稍后我还想使用数组,因此第一个用户将有:

Fruit = ["apple", "banana", "mango" ]
Veg = ["tomato", "potato", "cabbage" ]
代码:

更新: 我按照你的建议做了更改,但是“水果”和“蔬菜”没有出现在微调器中,你能给我一些建议吗?这是新代码

private void showData(DataSnapshot dataSnapshot) {

    Map<String,Object> map = dataSnapshot.child("users").child(userID).getValue(Map.class);
    ArrayList<String> array  = new ArrayList<>();
    for (Map.Entry<String,Object> entry : map.entrySet()) {

        // key contains "Fruit" or "Veg"
        String key = entry.getKey();
        // value is the corresponding list
        Object value = entry.getValue();
        array.addAll((ArrayList) value);

    }
    ArrayAdapter adapterUser = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
    spinnerUser.setAdapter(adapterUser);

}

有许多事情是复杂的,可能无法实现你想要的。我认为您正在寻找一种能够返回每个特定用户的列表映射,然后将所有列表项收集到微调器中的东西。如果是,试试这个

private void showData(DataSnapshot dataSnapshot) {

   Map<String,Object> map = (Map) dataSnapshot.getValue().child("users").child(userID);
   ArrayList<String> array  = new ArrayList<>();
   for (Map.Entry<String, Object> entry : map.entrySet()) {

      // key contains "Fruit" or "Veg"
      String key = entry.getKey();
      // value is the corresponding list
      Object value = entry.getValue();
      array.addAll((ArrayList) value);

   }
   ArrayAdapter adapter = new 
       ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
   lvProfiles.setAdapter(adapter);

}
private void showData(DataSnapshot DataSnapshot){
Map Map=(Map)dataSnapshot.getValue().child(“用户”).child(用户ID);
ArrayList数组=新的ArrayList();
对于(Map.Entry:Map.entrySet()){
//钥匙包含“水果”或“蔬菜”
String key=entry.getKey();
//值是对应的列表
对象值=entry.getValue();
addAll((ArrayList)值);
}
ArrayAdapter适配器=新
ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,数组);
lvProfiles.setAdapter(适配器);
}

我无法对此进行测试,请尝试,让我知道发生了什么错误,我将相应地编辑答案。

另一个问题是,在用户被检查为null之前调用user.getUid()。将来可能会出现空指针异常。另外,在初始化时,将数据库引用指向特定位置,而不仅仅指向根或“用户”,否则您将获取所有内容。不要在循环中初始化arraylist,arraylist将在每次迭代中清空并重新创建。当使用listview类型的项(如微调器)时,在oncreate中执行适配器操作,然后在填充“array”变量时,调用adapter.notifyDataSetChanged();或者在每次调用showData时让系统重新创建适配器对象。嗨,ryan,谢谢你,我在这里得到一个错误:Map Map=dataSnapshot.child(“用户”).child(userID).getValue(Map.class);ArrayList数组=新的ArrayList();对于(Map.Entry Entry:Map.entrySet()){3行表示“不兼容的类型,必需的对象,找到的(Map.Entry Entry)”不兼容的类型,必需的对象,找到的更改“Map Map Map=”到“Map Map=”。任何东西或者仅仅是水果和蔬菜?谢谢你,我希望你在生活中一切顺利。
private void showData(DataSnapshot dataSnapshot) {

    Map<String,Object> map = dataSnapshot.child("users").child(userID).getValue(Map.class);
    ArrayList<String> array  = new ArrayList<>();
    for (Map.Entry<String,Object> entry : map.entrySet()) {

        // key contains "Fruit" or "Veg"
        String key = entry.getKey();
        // value is the corresponding list
        Object value = entry.getValue();
        array.addAll((ArrayList) value);

    }
    ArrayAdapter adapterUser = new ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
    spinnerUser.setAdapter(adapterUser);

}
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}
private void showData(DataSnapshot dataSnapshot) {

   Map<String,Object> map = (Map) dataSnapshot.getValue().child("users").child(userID);
   ArrayList<String> array  = new ArrayList<>();
   for (Map.Entry<String, Object> entry : map.entrySet()) {

      // key contains "Fruit" or "Veg"
      String key = entry.getKey();
      // value is the corresponding list
      Object value = entry.getValue();
      array.addAll((ArrayList) value);

   }
   ArrayAdapter adapter = new 
       ArrayAdapter(this,android.R.layout.simple_list_item_1,array);
   lvProfiles.setAdapter(adapter);

}