无法从Android上的Firebase数据库获取数据

时间:2018-04-15 12:31:14

标签: java android firebase firebase-realtime-database

所以我有一个设置,我希望从Firebase上的数据库中获取数据,我可以将URL恢复正常但我无法从中获取数据。当我尝试调试时,它会读入query.addValueEventListener,但之后它会直接进入我的列表适配器。我不知道它没有得到数据。我在我的节点服务器上有一个类似的设置,它运行得很好,但由于某种原因无法在Android上运行

 final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
Query query = database.child("exercises");
Log.i("Database query", database.child("exercises").toString());
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot exerciseSnapshot: dataSnapshot.getChildren())
        {
            List<ExerciseList> exercises = new ArrayList<ExerciseList>();
            ExerciseList exerciseList = exerciseSnapshot.getValue(ExerciseList.class);
            Log.i("description/name", exerciseList.getDescription() + " " + exerciseList.getName());
            exercises.add(exerciseList);
            adapter = new ExerciseLoadListAdapter(mActivity, exercises);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});
mListView.setAdapter(adapter);

database

2 个答案:

答案 0 :(得分:1)

直接转到adapter因为addValueEventListener()Asynchronous listeners,它在后台运行!

试试这段代码,它可能对你有帮助!

final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
    //Query query = database.child("exercises");
    //Log.i("Database query", database.child("exercises").toString());
    database.child("exercises").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot exerciseSnapshot: dataSnapshot.getChildren())
            {
                List<ExerciseList> exercises = new ArrayList<ExerciseList>();
                ExerciseList exerciseList = exerciseSnapshot.getValue(ExerciseList.class);
                Log.i("description/name", exerciseList.getDescription() + " " + exerciseList.getName());
                exercises.add(exerciseList);

            }
               adapter = new ExerciseLoadListAdapter(mActivity, exercises);
               mListView.setAdapter(adapter)
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

答案 1 :(得分:0)

Firebase执行 NOT 实时获取调试模式下的数据。如果您需要firebase数据库中的某个对象,则需要先获取该对象。我多次遇到这个问题,这就是为什么在某些情况下我会在采取任何行动之前使用SQLite来存储来自Firebase的数据。但是,在片段中你不能这样做,你需要实时数据。因此,您需要将侦听器存储在变量中并在之后使用它。在我的Github页面中,我有一个片段正常工作。 ContatsFragment.java []&#39; S