java-从firebase检索返回NULL的数据

java-从firebase检索返回NULL的数据,第1张

概述当我调用listPost()时,它将返回NULL.我想它不会等待侦听器从Firebase获取帖子.在返回arrayPost之前,如何等待从firebase提取帖子?publicPost[]listPost(){ArrayList<Post>list=newArrayList<Post>();//FetchpostfromfirebasepostRef.addValueEventList

当我调用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的数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1079342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存