我需要存储他自己异步的FireBase getValue方法的结果.我不能使用类似“onPostExecute()”的东西,为了我的目的,我无法执行我的所有操作“into onDataChange()”因为我需要在将来的其他活动中引用一些参考.
这是我的片段检索数据:
List<Village> villages = new LinkedList<>(); Firebase ref = new Firebase("MYFIREBASEURL").child("village"); ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { spinnerArray.clear(); for (DataSnapshot postSnapshot : snapshot.getChildren()) { Village v = postSnapshot.getValue(Village.class); villages.add(v); } } @Override public void onCancelled(FirebaseError firebaseError) { System.out.println("The read Failed: " + firebaseError.getMessage()); } });
如果我尝试从“onDataChange”中读取村庄,我自然会为他的异步生活读取空值.有一种方法可以确保调用onDataChange吗?
解决方法
对不起,如果这不是你想要的,因为我的英语太糟糕了.
您可以定义一个侦听器接口来处理它.
例:
您可以定义一个侦听器接口来处理它.
例:
public interface OnGetDataListener { public void onStart(); public void onSuccess(DataSnapshot data); public void onFailed(DatabaseError databaseError); }
我创建了一个自定义函数来获取Database.class中的数据:
public void mReadDataOnce(String child,final OnGetDataListener listener) { listener.onStart(); FirebaseDatabase.getInstance().getReference().child(child).addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { listener.onSuccess(dataSnapshot); } @Override public void onCancelled(DatabaseError databaseError) { listener.onFailed(databaseError); } }); }
当我想从Main.class获取数据时,我会:
private void mCheckInforInServer(String child) { new Database().mReadDataOnce(child,new OnGetDataListener() { @Override public void onStart() { //DO SOME THING WHEN START GET DATA HERE } @Override public void onSuccess(DataSnapshot data) { //DO SOME THING WHEN GET DATA SUCCESS HERE } @Override public void onFailed(DatabaseError databaseError) { //DO SOME THING WHEN GET DATA Failed HERE } }); }
通过这种方式,您可以重用您的方法并处理数据.