所以我有一个设置,我希望从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);
答案 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