Android 从Firebase实时数据库读取数据

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()

我基本上是试图从Firebase中获取Key name的值,然后将所有名称显示到一个listview中。问题是,即使我的代码没有错误,我的Firebase数据也不会显示在listView中

火基结构:

我的代码:

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,您检查过了吗?