gpt4 book ai didi

android - 如何从实时数据库 firebase 的单个 ListView 中同时获取所有 child 的详细信息

转载 作者:行者123 更新时间:2023-11-30 00:28:22 25 4
gpt4 key购买 nike

我能够在 ListView 中检索单个子项的详细信息,但不能从 firebase 数据库中检索所有子项的详细信息。我想直接访问 child 。

这是我的代码

database pic

emulator pic

 public class ViewDatabase extends AppCompatActivity {
private static final String TAG = "ViewDatabase";
private DatabaseReference databaseReference;
private ListView mListView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_database_layout);
mListView = (ListView) findViewById(R.id.listview);
databaseReference =
FirebaseDatabase.getInstance().getReference().child("hello");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
showData(dataSnapshot);
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});

}
private void showData(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

userinfo user = snapshot.getValue(userinfo.class);

Log.d(TAG, "showData: name: " + user.getName());
Log.d(TAG, "showData: Mobile: " + user.getMob());
Log.d(TAG, "showData: Vehicle: " + user.getVehicle());
Log.d(TAG, "showData: Address: " + user.getaddress());

ArrayList<String> array = new ArrayList<>();
array.add(user.getName());
array.add(user.getMob());
array.add(user.getVehicle());
array.add(user.getaddress());
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, array);
mListView.setAdapter(adapter);
}

}
}

最佳答案

问题是您正在为快照中的每个项目创建一个新的数组和适配器。您应该只创建一次数组,将所有项目添加到其中,然后从该数组创建一个适配器:

private void showData(DataSnapshot dataSnapshot) {
ArrayList<String> array = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
userinfo user = snapshot.getValue(userinfo.class);

array.add(user.getName());
array.add(user.getMob());
array.add(user.getVehicle());
array.add(user.getaddress());
}
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, array);
mListView.setAdapter(adapter);
}
}

有了这个,您将在 ListView 中为数据库中的每个子节点得到 4 个项目。虽然这在技术上可行,但它可能不是您想要的。更常见的表示是为每个用户向数组添加一个项目:

private void showData(DataSnapshot dataSnapshot) {
ArrayList<String> array = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
userinfo user = snapshot.getValue(userinfo.class);

array.add(user.getName()+" ("+user.getMob()+")\n"+user.getVehicle()+"\n"user.getaddress());
}
ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, array);
mListView.setAdapter(adapter);
}
}

我还建议查看 FirebaseUI ,它有一个 FirebaseListAdapter以及其他无需为常见情况创建自己的适配器的类。

关于android - 如何从实时数据库 firebase 的单个 ListView 中同时获取所有 child 的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44946774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com