如何检索距离我的范围 0.5 公里以内的帖子?

2024-01-03

我正在保存用户发布的帖子的坐标。我正在生成一个推送 ID,然后使用它来保存帖子数据和 geofire 坐标。

我只想显示那些在 0.5 公里半径范围内的帖子。我在用GeoFire库相同,但我无法完成任务。

以下是我生成推送 ID 的方法:

itemID = databaseReferenceRequests.push().getKey();

以下是我如何使用它来保存 geofire 坐标以及帖子数据:

geoFire.setLocation(itemID, 
        new GeoLocation(Double.parseDouble(currentLat.getText().toString()), 
        Double.parseDouble(currentLng.getText().toString())));

databaseReferenceRequests.child(itemID).setValue(hRequest);

它的保存方式如下:

问题是,当我尝试仅获取距离我的范围 0.5 公里以内的帖子时,这种情况并没有发生,并且所有帖子(无论是近还是远)都会被检索。

这是我检索它的方法:

public void retrieveHelpRequests() {

            geoQuery = geoFire.queryAtLocation(new GeoLocation(currentLatDouble, currentLngDouble), 0.5);

            geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
                @Override
                public void onKeyEntered(String key, GeoLocation location) {
                    databaseReference.child("help-requests").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        Map<String, String> newRequest = (Map<String, String>) dataSnapshot.getValue();
                        imageUID = newRequest.get("imageUIDh");
                        homelessDescription = newRequest.get("homelessDescription");
                        currentLat = newRequest.get("currentLat");
                        currentLng = newRequest.get("currentLng");
                        postedBy = newRequest.get("postedBy");
                        postedAtTime = newRequest.get("postedAtTime");
                        postedOnDate = newRequest.get("postedOnDate");
                        utcFormatDateTime = newRequest.get("utcFormatDateTime");

                        String timeStr = utcFormatDateTime;
                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        df.setTimeZone(TimeZone.getTimeZone("UTC"));
                        Date date = null;
                        try {
                            // error on line below
                            date = df.parse(timeStr);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                        df.setTimeZone(TimeZone.getDefault());
                        final String persisted = df.format(date);

                        // Parse string from DB - UTC timezone
                        Date parsed = null;
                        try {
                            parsed = df.parse(persisted);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }

                        // Now convert to whatever timezone for display purposes
                        final SimpleDateFormat displayFormat = new SimpleDateFormat("h:mm a");
                        displayFormat.setTimeZone(TimeZone.getDefault());

                        formattedTime = displayFormat.format(parsed);

                        prepareDataForRequests();
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                        Snackbar snackbar = Snackbar
                                .make(coordinatorLayout, databaseError.getMessage(), Snackbar.LENGTH_LONG);
                        snackbar.setDuration(Snackbar.LENGTH_SHORT);
                        snackbar.show();
//                helpRequestsLoadingDialog.dismiss();
                        progressBarLoadingRequests.setVisibility(View.INVISIBLE);
                    }
                });

                    databaseReference.child("help-requests").addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(final DataSnapshot dataSnapshot) {
    //                adView.loadAd(request);
                            card_ads2.setVisibility(View.VISIBLE);
                            adView2.loadAd(request2);
                            if (snackbar != null) {
                                snackbar.dismiss();
                            }
                            progressBarLoadingRequests.setVisibility(View.INVISIBLE);

                            if (fastItemAdapter.getAdapterItemCount() == 0) {
                                emptyRVtext.setVisibility(View.VISIBLE);
                                emptyRVtexthh.setVisibility(View.VISIBLE);
                                card_ads2.setVisibility(View.INVISIBLE);
                            } else {
                                emptyRVtext.setVisibility(View.INVISIBLE);
                                emptyRVtexthh.setVisibility(View.INVISIBLE);
                            }

    //                progressBarLoadingRequests.setVisibility(View.INVISIBLE);
                        }

                        @Override
                        public void onCancelled(DatabaseError databaseError) {
                            Snackbar snackbar = Snackbar
                                    .make(coordinatorLayout, databaseError.getMessage(), Snackbar.LENGTH_LONG);
                            snackbar.setDuration(Snackbar.LENGTH_SHORT);
                            snackbar.show();
    //                hRequestsLoadingDialog.dismiss();
                            progressBarLoadingRequests.setVisibility(View.INVISIBLE);
                        }
                    });
                }

                @Override
                public void onKeyExited(String key) {

                }

                @Override
                public void onKeyMoved(String key, GeoLocation location) {

                }

                @Override
                public void onGeoQueryReady() {

                }

                @Override
                public void onGeoQueryError(DatabaseError error) {
                    Toast.makeText(getBaseContext(), "Error retriving geoquery", Toast.LENGTH_SHORT).show();
                }
            });

        }

这是错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference

请告诉我如何仅检索用户 0.5 公里范围内的帖子?


还有一种方法可以在 Java 中的 Geo Query 中查找匹配项。 代码与 UI 非常相似。 请查看下面的链接以获取工作代码片段。https://youtu.be/M9d526OyG54 https://youtu.be/M9d526OyG54搜索驱动程序:: 系列教程的第 15 篇。

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

如何检索距离我的范围 0.5 公里以内的帖子? 的相关文章

随机推荐

  • 在函数内调用时使用 png 函数不起作用

    我有一个函数可以执行一些操作 然后根据条件进行绘图 f lt function n rand lt rnorm n no lt seq len n df lt data frame no no rand rand if n gt 10 pn
  • 类型错误:路径必须是字符串或缓冲区 MEAN 堆栈

    我在前端使用 Angular 5 在后端使用 Node 并使用 Mongo 作为数据库 现在我试图将图像保存到数据库 但不断收到此错误 我不知道我是在正面还是背面犯了错误 因为这是我第一次处理文件 我做了我的研究 但它主要指向 Angula
  • 如何覆盖 Apache Flink 中的配置值?

    我正在尝试将 Apache Flink 的指标收集到 Prometheus 中 Flink 文档说我需要将以下行添加到我的 flink conf yaml 中 metrics reporter promgateway class org a
  • 如何在 datagridview 中动态创建列并为其及其行分配标题?

    我正在使用 datagridview 但没有使用任何数据源 我想动态地给它分配值 创建我自己选择的列数和行数并命名它们 另外 我想将图像添加到单元格而不是数据 至于更改列文本 我们可以使用 grid Columns 0 HeaderText
  • 为什么“std::vector”的大小是 16 字节?

    我使用 memcpy 将 std vectors 的内容复制到原始数组 对于 int float double 等数据类型 它运行良好 当我开始复制布尔向量时 我遇到了一个问题 即我得到了奇怪的值 首先 我开始为浮点向量进行测试输出 std
  • EF4:LINQ 2 实体查询在 C# 中有效,但在 VB 中无效

    编辑 我在下面留下了原始问题 并提供了更多上下文和代码来重现问题 下面的简短版本包含了问题的本质 简短版本 下面的查询抛出 System NotSupportedException 无法转换类型 System Linq IOrderedQu
  • VBA 使用 format() 或 CDate() 将字符串转换为日期时出现问题

    如果以前曾问过这个问题 请为我指出正确的方向 我似乎无法用我的谷歌搜索技能找到任何有用的东西 我有以下代码 它读取这样的字符串 停电开始日期 05 10 11 23 59 EST并提取日期信息 即 05 10 11 23 59 sStart
  • JQuery 类选择器在removeClass后仍然触发

    我正在创建一个小型投票机制 通过 AJAX 发送快速数据库时间戳 一系列带有 投票 类别的按钮是投票的触发器 而下面的文本显示该特定项目有多少 投票 从单击事件运行 AJAX 方法后 我删除了 投票 类 以便该项目中不能有多个投票 然而我的
  • 为什么 clang 在 Scons 下不显示颜色输出?

    使用 Scons 构建时 我可以将其配置为使用 clang 如下所示 env CXX clang 但是 它似乎没有保留 clang 输出的颜色信息 我怎样才能让 scons 保留颜色 根据铿锵文档 http clang llvm org d
  • 使用 g++ 编译 C++ 时,“隐藏构造函数”警告是什么意思?

    使用以下代码 include
  • 如何打印 .net 中的文本文件

    如何在 vb net 中打印 txt 文件 希望不使用任何第三方 See 如何在vb net中打印批处理文件 https stackoverflow com questions 4435644 how to print batch file
  • Git 中的插入和删除是什么?

    当我运行 git 命令时git commit or git log shortstat部分输出如下所示 2 files changed 3 insertions 11 deletions 一个的含义是什么插入 or a deletion 它
  • Maven 为同一个项目生成两个不同的 WAR 文件

    我有一个 Maven Web 服务项目 由两个不同的服务类 testClass1 和 testClass2 组成 我想要为同一项目的两个类创建两个不同的 WAR 文件 目前我正在为这两个服务生成单个 WAR 文件 如何为同一个项目生成两个不
  • 用于 Java 的非阻塞 io Web 服务器/框架

    有谁知道任何用于java的node js风格的网络服务器框架 我意识到 在处理 Web 请求时具有非阻塞回调行为需要 Web 服务器级别的深入支持 我对 Node js 感兴趣 但是当我有一个最终保存数据的 Web 服务器时 我想利用 Ja
  • sed one-liner - 查找关键字周围的分隔符对

    我通常使用大型 XML 文件 并且通常通过以下方式进行字数统计 grep确认某些统计数据 例如 我想确保至少有五个实例widget通过以下方式在单个 xml 文件中 cat test xml grep ic widget 此外 我只是希望能
  • 你能通过地址比较对象是否相等吗?

    我有一个函数可以按每个属性比较对象以查看它们是否相同 但我只是想知道 通过地址比较对象而不是检查它们是否是完全相同的对象会更好吗 编辑 请注意 如果您希望函数正常工作 则不能将值 对象 传递给函数 您需要传递 可能是常量 引用或指针 如果您
  • Android 货币符号排序

    我正在使用非英语语言环境的设备 英语货币的格式如下 1 如果我有英语语言环境 我会得到欧元货币 例如 1 Using format setCurrency Currency getInstance currency return forma
  • 角度 2 生产构建后出现意外标记 <

    在构建我的 Angular 2 应用程序之后ng build prod我复制了dist我的 node js 项目中的文件夹并将基本标签修改为 现在 当我尝试在浏览器中打开时 我收到以下错误 polyfills aa13f03 bundle
  • 导入环境OpenAI Gym出错

    我正在尝试运行 OpenAI Gym 环境 但出现以下错误 import gym env gym make Breakout v0 ERROR Library Frameworks Python framework Versions 3 8
  • 如何检索距离我的范围 0.5 公里以内的帖子?

    我正在保存用户发布的帖子的坐标 我正在生成一个推送 ID 然后使用它来保存帖子数据和 geofire 坐标 我只想显示那些在 0 5 公里半径范围内的帖子 我在用GeoFire库相同 但我无法完成任务 以下是我生成推送 ID 的方法 ite