Android 从Firebase实时数据库读取数据
我基本上是试图从Firebase中获取Key name的值,然后将所有名称显示到一个listview中。问题是,即使我的代码没有错误,我的Firebase数据也不会显示在listView中 火基结构: 我的代码:Android 从Firebase实时数据库读取数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我基本上是试图从Firebase中获取Key name的值,然后将所有名称显示到一个listview中。问题是,即使我的代码没有错误,我的Firebase数据也不会显示在listView中 火基结构: 我的代码: List<String> list = new ArrayList<>(); list.addAll(FFunc()); Toast.makeText(this, "Success!", Toast.LENGTH_SHORT).show()
List<String> list = new ArrayList<>();
list.addAll(FFunc());
Toast.makeText(this, "Success!", Toast.LENGTH_SHORT).show();
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_listview, R.id.textView, list);
simpleListView.setAdapter(arrayAdapter);
public List<String> FFunc(){
final List<String> arr = new ArrayList<>();
DatabaseReference database = FirebaseDatabase.getInstance().getReference("Employee");
DatabaseReference myRef = database.child("name");
myRef.addValueEventListener(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren()) {
String name = data.getValue(String.class).toString();
arr.add(name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
return arr;
}
通过使用上述代码,我从Firebase获得了一个没有值的空listView。任何人都可以告诉我这个问题的可能解决方案。我是Android的初学者,因此即使花了整整两天的时间,我也不知道下一步该做什么。使用LiveData作为返回类型,观察其值的变化以执行所需的操作
private MutableLiveData<List<String>> userNameMutableLiveData = new MutableLiveData<>();
public MutableLiveData<List<String>> FFunc() {
final List<String> arr = new ArrayList<>();
DatabaseReference database = FirebaseDatabase.getInstance().getReference("Employee");
DatabaseReference myRef = database.child("name");
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren()) {
String name = data.getValue(String.class).toString();
arr.add(name);
}
....
userNameMutableLiveData.setValue(arr);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
return userNameMutableLiveData;
}
List<String> list = new ArrayList<>();
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.activity_listview, R.id.textView, list);
simpleListView.setAdapter(arrayAdapter);
....
FFunc().observe(this, new Observer<List<String>>() {
@Override
public void onChanged(List<String> names) {
//here, do whatever you want on `names`
list = names;
arrayAdapter.notifyDataSetChanged();
}
});
您无法将arr作为方法的结果返回。请检查副本以了解为什么会有这种行为,以及如何使用自定义回调解决此问题。@Haseeb,您检查过了吗?