Android:如何在小部件中显示来自 Firestore 的数据?

2024-03-10

我正在尝试从 firestore 集合中获取数据并将其显示为小部件中的列表,我对小部件逻辑如何工作不太有经验,所以我认为可能有一个函数可以在数据更新时调用小部件视图进行更新充满。

我基本上从a获取信息RemoteViewFactory类,但由于 firebase 函数都是异步的,我不知道如何使小部件等待数据填充,或调用类中调用更新的函数。

目前我的班级是这样的:

public class TaskDataProvider implements RemoteViewsService.RemoteViewsFactory {
    private static final String TAG = TaskDataProvider.class.getSimpleName();
    private static final int TOTAL = 10;

    List<Task> tasks = new ArrayList<>();

    private Context context;

    public TaskDataProvider(Context context) {
        this.context = context;
    }

    @Override
    public void onCreate() {
        this.loadData(value -> this.tasks = value);
    }

    @Override
    public void onDataSetChanged() {
        this.loadData(value -> this.tasks = value);
    }

    @Override
    public void onDestroy() {

    }

    @Override
    public int getCount() {
        return this.tasks.size();
    }

    @Override
    public RemoteViews getViewAt(int position) {
        final RemoteViews remoteViews = new RemoteViews(this.context.getPackageName(), R.layout.widget_task_item);
        final Task currentTask = this.tasks.get(position);

        remoteViews.setTextViewText(R.id.widget_task_item_title, currentTask.getTitle());
        remoteViews.setTextViewText(R.id.widget_task_item_description, currentTask.getDescription());

        return remoteViews;
    }

    @Override
    public RemoteViews getLoadingView() {
        return null;
    }

    @Override
    public int getViewTypeCount() {
        return 1;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }

    private void loadData(ResultListener<List<Task>> resultListener) {
        FirebaseAuth auth = FirebaseAuth.getInstance();
        FirebaseUser user = auth.getCurrentUser();

        if (user != null) {
            this.retrieveTasks(user.getUid(), resultListener);
        }
    }

    private void retrieveTasks(String userId, ResultListener<List<Task>> resultListener) {
        FirebaseFirestore firestore = FirebaseFirestore.getInstance();

        firestore.collectionGroup(this.context.getString(R.string.database_project_task_collection_name))
            .whereEqualTo(Task.FIELD_ASSIGNEE, userId)
            .whereEqualTo(Task.FIELD_STATUS, TaskStatus.STATUS_OPEN)
            .get()
            .addOnCompleteListener(task -> {
                if (!task.isSuccessful()) {
                    Log.e(TAG, "Unable to retrieve task list", task.getException());
                } else {
                    final QuerySnapshot result = task.getResult();


                    if (result != null) {
                        Log.d(TAG, String.format("Found tasks: %d", result.size()));

                        resultListener.onResult(result.toObjects(Task.class));
                    }
                }
            });
    }
}

Both onCreate and onDataSetChanged正在打电话loadData它负责从 firestore 获取集合数据,我知道当时两者onCreate and onDataSetChanged运行完毕tasks属性仍未填充,因此我在小部件中渲染的列表中未填充任何内容。

我如何正确地从 firebase 获取信息,然后填写ListView小部件包含该信息?


None

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

Android:如何在小部件中显示来自 Firestore 的数据? 的相关文章

随机推荐

  • 带 INNER JOIN 的 SQL DELETE

    有2张桌子 spawnlist and npc 我需要从中删除数据spawnlsit npc templateid n idTemplate是唯一 连接 表格的东西 我已经尝试过这个脚本 但它不起作用 我已经尝试过这个 DELETE s F
  • 如何在 unix 中解压 tar.bz 文件?

    我发现大量页面说明如何解压缩 tar bz2 文件 但是如何解压缩 tar bz 文件呢 use the j的选项tar tar xjf path to archive tar bz
  • 调用database.rawQuery时Android SQLiteMisuseException

    我在 Android 应用程序中使用 SQLite 数据库 有时在调用 database rawQuery String sql String SelectionArgs 时会收到 SQLiteMisuseException 这很奇怪 因为
  • 在 Canvas 上绘制两个 3D 字符串?

    我必须在画布上绘制 2 个字符串 字符串必须使用相同坐标第二根弦必须是第一根弦绕 Y 轴旋转 45 度的结果 结果必须如下所示 这是我的代码 Matrix matrix new Matrix matrix canvas getMatrix
  • 创建具有最大行数的表 (ORACLE)

    Oracle建表时有没有办法限制最大行数 如果表有数字键 您可以添加一个检查约束 声明该键不超过特定值 ALTER TABLE turnip ADD CONSTRAINT check turnip id CHECK turnip id lt
  • 如何在 Rust 中模拟特定方法而不是所有方法?

    我在确定目标结构的方法的单元测试时遇到了麻烦 我有一个方法random number根据结构体的属性返回一个随机值 还有另一种方法plus one它获取第一个方法的结果并用它做一些事情 pub struct RngTest pub attr
  • Flutter Google Maps - 根据行驶方向旋转标记

    任何人都可以分享 Flutter 谷歌地图插件的文档 代码示例 我可以在其中根据行驶方向旋转标记 例如 汽车图标 我看到这可以通过旋转标记在本机库上实现 但在 Flutter 中找不到任何旋转标记的选项 我想我们在旋转标记时需要考虑以下几点
  • 匹配 gtksourceview 中的整个字符串

    使用这个简短的 XML 片段在 gtksourceview 中定义字符串
  • XACML 3.0 和多种资源

    我试图弄清楚如何使用 Balana 的 XACML 实现来实现授权机制 WSO2 的权利引擎基于 Balana 当用户请求访问单个资源时 例如 鲍勃想要阅读医疗记录 事情就很简单了 然而 假设鲍勃想要阅读他所有患者的医疗记录 这里的第一个问
  • SQLite 异常:SQLite 忙

    任何人都可以提供有关此错误的任何信息 我正在尝试使用 Objective C 插入表 当我这样做时 我收到错误 SQLite Busy 为什么会发生这种情况 如果在调用 sqlite3 函数时得到错误代码 SQLITE BUSY 这意味着根
  • 使用 VBScript 的 IE8 兼容模式

    是否可以使用 VBScript 设置和检查 IE8 中的兼容模式 根据定义文档兼容性 http msdn microsoft com en us library cc288325 VS 85 aspx文章 有文档 文档模式 http msd
  • 关系数据建模与非关系数据建模

    我有一个用户数据库 每个用户具有以下属性 user id name zip city In a 关系型数据库我会在表格中对其进行建模user user id name 位置 ID 并有第二个表称为location location id z
  • 后台和线程中的 JavaFX 图像加载

    我认为这是一个简单的问题 但我很难找到答案 我有一个与 JavaFX Scene 对象关联的 ImageView 对象 我想从磁盘加载大图像并使用 ImageView 依次显示它们 我一直在尝试找到一种好方法来重复检查 Image 对象 当
  • 自定义 Symfony2 中选择/实体字段的呈现

    我想要一个
  • 使用字符串文字在构造函数中初始化 std::array 成员。海湾合作委员会错误?

    下面的例子初始化一个std array
  • 为什么使用 Python 解释器计算小斐波那契数列比 PyPy 更快

    我正在使用 PyPy 进行一些斐波那契计算 首先我从较大的数字开始 PyPy 更快一点 但是对于较小的数字 它提供几乎相同的性能 并且某些情况下普通解释器比 pypy 快得多 有什么具体原因吗 from time import time d
  • gdb 正在跳过行

    我在理解 gdb 时遇到一些问题 我有一个主要功能 我自己写了这个主要功能 这个main中的一些行 调用库中的一些函数 我认为库名称并不重要 但它是tesseract ocr 我在 main 中调用函数的行 构造函数在这里 choiceIt
  • AFNetworking-发布请求-向正文添加简单文本

    如何使用 AFNetworking 将简单字符串 无 JSON 或任何其他格式 添加到发布请求 我已经成功的最好的方法是用 连接 和这个 NSURLRequest request myServer multipartFormRequestW
  • javascript:如何在弹出警报中显示脚本错误?

    我想在弹出警报中显示脚本错误 而不是在浏览器控制台中显示它们 window onerror function var message get error messages and put them here alert message re
  • Android:如何在小部件中显示来自 Firestore 的数据?

    我正在尝试从 firestore 集合中获取数据并将其显示为小部件中的列表 我对小部件逻辑如何工作不太有经验 所以我认为可能有一个函数可以在数据更新时调用小部件视图进行更新充满 我基本上从a获取信息RemoteViewFactory类 但由