当我调用ListPost()时,它将返回NulL.我想它不会等待侦听器从Firebase获取帖子.在返回arrayPost之前,如何等待从firebase提取帖子?
public Post[] ListPost() { ArrayList<Post> List = new ArrayList<Post>(); // Fetch post from firebase postRef.addValueEventListener(new ValueEventListener() { @OverrIDe public voID onDataChange(DataSnapshot snapshot) { for(DataSnapshot child : snapshot.getChildren()) { String ID = child.getKey(); String Title = child.child("Title").getValue().toString(); String content = child.child("content").getValue().toString(); String date = child.child("date").getValue().toString(); String status = child.child("status").getValue().toString(); Post post = new Post(); post.setID(ID); post.setTitle(Title); post.setContent(content); post.setDate(date); post.setStatus(status); List.add(post); } } @OverrIDe public voID onCancelled(FirebaseError error) { System.out.println("The read Failed: " + error.getMessage()); } }); // Convert ArrayList to Array Post[] arrayPost = new Post[List.size()]; List.toArray(arrayPost); return arrayPost;}
解决方法:
您当然可以使用信号量之类的方法将ListPost()转换为同步方法,但这不是Firebase打算工作的方式.例如,每次调用addValueEventListener()时,都会添加一个新的侦听器,只要数据更改,该侦听器就会被调用,每次调用ListPost()都会被调用一次.
如果ListPost()方法的目的是在某处(例如,您的UI)更新某些状态,则可以直接从onDataChanged()方法更新状态.这将确保您仅添加一个值事件侦听器,并且数据中的更新将始终反映在当前状态而无需刷新.
// Setup once when your app loadspostRef.addValueEventListener(new ValueEventListener() { @OverrIDe public voID onDataChange(DataSnapshot snapshot) { ArrayList<Post> List = new ArrayList<Post>(); for(DataSnapshot child : snapshot.getChildren()) { String ID = child.getKey(); String Title = child.child("Title").getValue().toString(); String content = child.child("content").getValue().toString(); String date = child.child("date").getValue().toString(); String status = child.child("status").getValue().toString(); Post post = new Post(); post.setID(ID); post.setTitle(Title); post.setContent(content); post.setDate(date); post.setStatus(status); List.add(post); } // Do something with your List of posts here updateSomething(List); } @OverrIDe public voID onCancelled(FirebaseError error) { System.out.println("The read Failed: " + error.getMessage()); }});
由于此处有子级列表,因此您也可以在此处使用ChildEventListener,并对添加的子级,更改的子级和删除的子级事件做出反应,以更新您的状态或UI.
总结以上是内存溢出为你收集整理的java-从firebase检索返回NULL的数据全部内容,希望文章能够帮你解决java-从firebase检索返回NULL的数据所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)