我需要存储他自己异步的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 } }); }
通过这种方式,您可以重用您的方法并处理数据.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。