[英]Can't get data from Firebase Database on Android
因此,我进行了设置,希望从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);
它直接进入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) {
}
});
Firebase 不会在调试模式下实时获取数据。 如果您需要Firebase数据库中的某些对象,则需要先获取该对象。 我几次面对这个问题,这就是为什么在某些情况下我使用SQLite在执行任何操作之前从Firebase存储数据的原因。 但是,在一个片段中,您无法做到这一点,需要实时数据。 因此,您需要将侦听器存储在变量中,然后使用它。 在我的Github页面上,我有一个片段工作正常。 ContatsFragment.java []的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.