从 firebase 检索数据返回 NULL

2024-03-07

当我调用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 loads
postRef.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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 firebase 检索数据返回 NULL 的相关文章

  • 我应该选择的最低 SDK 版本是多少? (截至2018年11月)

    据我所知 android studio 中默认的最小 SDK 设置是 15 我读到我应该增加它 因为没有多少人 或者可能没有 仍在使用该 android 版本 另外 我计划使用 android studio 中的一些新功能 这些功能仅适用于
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 使用java在网页中进行字符编码

    如何使用java找出网页中的字符编码类型 打开与 URL 的连接 使用URL openConnection http download oracle com javase 6 docs api java net URL html openC
  • 使用 equals 方法比较两个对象,Java

    我有一个对象数组 我想将它们与目标对象进行比较 我想返回与目标对象完全匹配的对象的数量 这是我的计数方法 public int countMatchingGhosts Ghost target int count 0 for int i 0
  • 开发人员实际上是否使用 vim 在 Windows 操作系统上编写代码(Java)? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何知道用户是否在 Android 应用程序中输入了错误的密码(锁定屏幕)

    我正在开发一个 Android 应用程序 如果用户在 Android 锁定屏幕中输入错误的密码 则必须完成其中一项活动 例如 如果用户输入错误的密码 则会发送电子邮件 我将不胜感激任何帮助 提前致谢 Kshitij 锁屏在完全沙箱环境中运行
  • 如何在Android网格视图中设置单元格大小?

    我正在尝试为应用程序制作一个带有大图标的网格视图 但我找不到任何有关修改 Android 上网格布局上的单元格大小的教程 有人可以给我一个例子或相关链接吗 Thanks 就像另一个一样适配器视图 http developer android
  • Android Drawable 绘图性能?

    在我看来 我有一个简单的 ARGB 可绘制对象 大约需要 2 毫秒才能绘制 但我可以在 0 5 毫秒内绘制与位图相同的文件 只是一些快速代码 我真的不能认为它是一个选项 优化可绘制对象的绘制速度的最佳方法是什么 这取决于可绘制的数量以及每个
  • Java:java.util.Preferences 失败

    我的程序将加密的产品密钥数据保存到计算机上java util Preferences类 系统首选项 而不是用户 问题是 在 Windows 和 Linux 上 尚未在 OSX 上测试过 但可能是相同的 如果我不运行该程序sudo或者具有管理
  • BitmapFactory.decodeResource() 忽略 jpg 图像的 inPreferredConfig 选项

    我尝试将jpeg资源图像加载到ARGB 8888格式的位图 BitmapFactory Options opts new BitmapFactory Options opts inPreferredConfig Bitmap Config
  • Java 常量枚举[重复]

    这个问题在这里已经有答案了 可能的重复 理解 Java 中的枚举 https stackoverflow com questions 1419835 understanding enums in java 为什么我们应该使用枚举而不是 Ja
  • 从Android客户端登录appengine

    我正在尝试登录应用程序引擎并访问应用程序引擎中的用户服务API 基本上我希望能够看到谁登录了我的 servlet 我正在使用从 android 获取 authtoken 然后从应用程序引擎获取 ASID 或 SACID cookie 的身份
  • Android 4.2 - Environment.getExternalStorageDirectory().getPath() 行为

    我一直在开发一个android应用程序 在上次更新到4 2之前 我使用 Environment getExternalStorageDirectory getPath 它返回了我 storage sdcard0 但自从更新后我现在得到了 s
  • 使用 Commons 或 Guava 将文本文件转换为 Java Set

    我想将文件中的每一行加载到 HashSet 集合中 有没有一种简单的方法可以做到这一点 怎么样 Sets newHashSet Files readLines file charSet 使用番石榴 参考 文件 readLines http
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • 如何在apache POI中读取excel文件的准确单元格内容

    当我读取单元格的内容时 例如如果它是日期格式 它会转换为另一个值 例如 12 31 2099 gt 46052 和 50 00 gt 50 和 50 00 gt 0 5 但我想要的是获取每个单元格的确切字符串值 我的代码是这样的 cell
  • 尝试使用 Spring 和扩展 Hibernate JpaRepository 的自定义 GenericDao 接口来使用 EhCache

    背景 这是我的工作 简化 GenericDao接口 由任何实现DomainDao 通用Dao java NoRepositoryBean public interface GenericDao
  • 如何从灰度字节缓冲区图像创建位图?

    我正在尝试使用新的 Android 人脸检测移动视觉 API 来处理帧图像 所以我创建了自定义检测器来获取帧并尝试调用 getBitmap 方法 但它为空 所以我访问了帧的灰度数据 有没有办法从它或类似的图像持有者类创建位图 public
  • while循环只执行一次

    我很难弄清楚为什么 while 循环实际上不会循环 它运行一次并停止 import java util public class mileskm public static void main String args Scanner inp
  • 膨胀类 android.support.design.widget.CoordinatorLayoute 时出错

    我正在尝试运行我的应用程序 但不断收到标题中列出的错误 我读过周围的内容 人们说尝试将主题更改为 AppCombat 主题 但这似乎不起作用 以下是我遇到的错误 Process com example jmeyer27 crazytiles

随机推荐

  • 如何正确解释作为字符串接收的 JSON 对象?

    我的网络服务已损坏 无法访问和更改 它发送一些主要不错的 JSON 但其中一个属性是作为字符串发送的嵌套 JSON 对象 http www ireland com api getitemweb 185213 http www ireland
  • 在 C++ 中使用“void”模板参数

    采取以下最小示例 using Type1 std function
  • 使用循环向mysql插入100000条数据

    我想在mysql中用循环插入数据 100000 当我运行没有错误 但数据没有插入到我的表中时 这是我的查询 DELIMITER DECLARE i INT DEFAULT 1 WHILE i lt 100 DO INSERT INTO vo
  • 使用 RestTemplate 的 Spring Web 服务的超时配置

    我想使用 RestTemplate 在客户端为 Spring Web 服务配置超时 我尝试了以下配置
  • 批处理文件:列出特定文件夹中的rar文件并将结果写入文本文件

    我有一个文件夹 其中包含一些 rar 文件和子文件夹 这些子文件夹包含 rar 文件或子文件夹 递归结构 我想编写一个批处理文件 列出此文件夹树 完整路径 中的所有 rar 文件 结果被写入文本文件 Example 具体文件夹 Quest
  • WordPress - 将特色图像添加到自定义帖子类型

    我正在尝试将特色图像添加到我的主题中 但不适用于帖子或页面 我创建了一个名为 属性 的自定义类型 用于房地产经纪人 那么如何启用特色图像 因为它没有出现在场景选项中 希望有人能帮忙 property new Cuztom Post Type
  • Oracle无法从LONG数据类型转换为CLOB数据类型(数据类型不一致错误)

    Oracle 11g 在尝试将 long 数据类型转换为 clob 时出现以下错误 我尝试 select to lob long col name from table1 I get Error Execution 1 39 ORA 009
  • 定制频道wifi直连

    谁能告诉我 有没有自定义 wifi direct 频道的选项 我不仅需要在 ch1 ch6 和 ch11 之间进行自定义 还需要在我选择的其他频道中进行自定义 我怎样才能做到这一点 要更改设备 Wifi Direct 的频道 您需要执行以下
  • 设置创建或更改时间戳

    Using utimes futimes futimens等等 可以设置文件的访问和修改时间戳 修改时间是文件数据最后一次改变的时间 同样 ctime 或更改时间是文件属性 例如权限 最后一次更改的时间 Linux POSIX 维护三个时间
  • WPF TreeView刷新

    我有一个问题 我用TreeView在我的 WPF 项目中可视化我的 XML 数据 问题是 当我编辑我的XmlDocument它不会刷新TreeView 但我注意到当我检查时SelectedNode 这是我编辑的XmlNode 所以我的 编辑
  • 为什么我的文本字符串在 Pygame 中呈现为实心/填充矩形? [复制]

    这个问题在这里已经有答案了 所以我制作了一个 Yo Mama 笑话生成器 它做了它应该做的事情 如果我删除所有 Pygame 特定的代码并将其打印到终端 命令行 它就会起作用 但是当我添加 Pygame 并创建一个应用程序时 它会将文本显示
  • 正则表达式:用一种模式替换另一种模式

    我正在尝试用另一种正则表达式模式替换一种正则表达式模式 st srt Awake 01x02 iNTERNAL WEBRiP XViD GeT srt st mkv Awake S01E02 iNTERNAL WEBRiP XViD GeT
  • laravel5: chdir(): 没有这样的文件或目录 (errno 2)

    当我将 Laravel 5 上的网站构建部署到 VPS 服务器时遇到问题 但在本地计算机上它工作正常 我的页面是http easyway vn http easyway vn 当前页面显示空白并出现错误 无法加载资源 服务器响应状态为 50
  • 我的脚本不会进入下一页进行抓取

    我编写了一个用于网络抓取的代码 除了下一页活动之外 一切都很好 当我运行我的代码时scrape数据只是来自网站scraping第一页不会向前移动以抓取其他页面数据 实际上 我是使用 python 进行网络抓取的新手 所以请指导我 你能修复我
  • 修改Django中间件中的地址

    我不知道是否可行 但我想使用中间件在 URL 末尾添加一些参数 modyf 请求的 URL 后可以不重定向来完成吗 IE 用户点击 some link 中间件将其重写为 some link par1 1 par2 2 其他方法是修改响应并替
  • CSS 负 z-index:这是什么意思?

    如果我向元素的 z index 属性添加负整数值 根据标准 预期效果是什么 我搜索了答案 但只找到了这个 https developer mozilla org en US docs Web CSS z index https develo
  • 我在命令面板中没有看到 hello world 命令

    So the tutorial https code visualstudio com api get started your first extension开发 Visual Studio 代码扩展说要打F5然后是命令面板 我应该在其中
  • Android getColumName 和 getColumnIndex

    我是一名 Android 新手 我的光标有问题 我无法使用以下方式访问数据 cursor get cursor getColumnIndex columnName 我尝试了以下代码来测试是否有错误 while cursor moveToNe
  • 一个模型可以“属于”任一/或多个模型吗?

    抱歉 如果这是一个有点菜鸟的问题 但希望澄清我对此的想法 我有一个模型 它可以属于一个模型 也可以属于另一个模型 例如 假设我有一个团队模型和一个成员模型 这两个模型都可以有一个 BankAccount class Team has man
  • 从 firebase 检索数据返回 NULL

    当我调用listPost 时 它将返回NULL 我想它不会等待侦听器从 firebase 获取帖子 在返回 arrayPost 之前 如何等待从 firebase 获取帖子 public Post listPost ArrayList