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);
}