草庐IT

android - 移动后端启动器连续查询永不返回

coder 2023-12-28 原文

我已经根据 this 为移动后端入门应用程序编写了一个 Android 客户端。教程。一切都在执行 Continuous Queries 部分。

我编写了一个查询并从代码中的正确位置调用它 (onPostCreate()),但是该查询从未返回任何数据。

我不认为这是身份验证问题,因为我能够成功进行其他调用。

这是从不返回结果的代码:

CloudCallbackHandler<List<CloudEntity>> handler = new CloudCallbackHandler<List<CloudEntity>>() {
        @Override
        public void onComplete(List<CloudEntity> results) {
            for (CloudEntity entity : results) {
                UserLocation loc = new UserLocation(entity);
                mUserLocations.remove(loc);
                mUserLocations.add(loc);
                drawMarkers();
            }
        }

        @Override
        public void onError(IOException e) {
            Toast.makeText(getApplicationContext(), e.getMessage(),
                    Toast.LENGTH_LONG).show();
        }
    };

    CloudQuery query = new CloudQuery("UserLocation");
    query.setLimit(50);
    query.setSort(CloudEntity.PROP_UPDATED_AT, Order.DESC);
    query.setScope(Scope.FUTURE_AND_PAST);
    getCloudBackend().list(query, handler);

使用调试器,我已经验证了 getCloudBackend().list() 行执行了,但是 onComplete() 方法从未被命中,也没有 onError()

这是一个完美调用的示例:

UserLocation self = new UserLocation(super.getAccountName(),
                gh.encode(mCurrentLocation));
        getCloudBackend().update(self.asEntity(), updateHandler);

本质上,getCloudBackend().update() 有效,而 getCloudBackend().list() 无效。

我还应该补充一点,我已经从教程中链接的 github 存储库下载了完整的源代码,该代码也存在同样的问题。 我也多次尝试重新部署后端服务器。

最佳答案

好的,我终于解决了这个问题!问题既存在于 list 中,也存在于类 GCMIntentService.java

在 list 中,GCM 被注册为一个服务并且属于一个包。默认情况下,此服务是默认包 com.google.cloud.backend.android 的一部分。当您创建一个新包并将所有客户端代码放入其中时,您需要将 GCMIntentService.java 类移动到该新包中,并在 list 中修改服务和广播接收器

<service android:name="yourpackagename.GCMIntentService" />
<receiver
        android:name="com.google.android.gcm.GCMBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <category android:name="yourpackagename" />
        </intent-filter>
    </receiver>

默认包名称附带的任何其他权限也应更新为主包名称。如果您只打算使用移动后端启动器附带的一个默认包,则无需修改。

关于 GoogleAuthIOException,我最初也收到了。因此,我重新执行了启用 GCM 和身份验证的所有步骤。不过要记住的是,在注册 GCM 服务器 key 和 Web 客户端 ID 时,我仍然遵循教程并使用 Web Application -> Generic。注册 Android 客户端 ID 时要记住的另一个关键事项是,对于您的 SHA1 指纹,它还需要一个包名称。同样,如果您的项目使用多个包,则包名称必须是您的主要客户端包。您可以从旧的 Google API 控制台获取 Consts.java 中的项目编号(注册 GCM 需要它),并从新的云控制台获取项目 ID。 Web 客户端 ID 也包含在 Consts.java 文件中,也包含在同一个文件中,您必须通过更改启用身份验证

public static final boolean IS_AUTH_ENABLED = false;

public static final boolean IS_AUTH_ENABLED = true;

希望这对您有所帮助。

关于android - 移动后端启动器连续查询永不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17714734/

有关android - 移动后端启动器连续查询永不返回的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 多次弹出/移动 ruby​​ 数组 - 2

    我的代码目前看起来像这样numbers=[1,2,3,4,5]defpop_threepop=[]3.times{pop有没有办法在一行中完成pop_three方法中的内容?我基本上想做类似numbers.slice(0,3)的事情,但要删除切片中的数组项。嗯...嗯,我想我刚刚意识到我可以试试slice! 最佳答案 是numbers.pop(3)或者numbers.shift(3)如果你想要另一边。 关于ruby-多次弹出/移动ruby​​数组,我们在StackOverflow上找到一

  4. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  5. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  6. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  7. ruby - 检查字符串是否包含散列中的任何键并返回它包含的键的值 - 2

    我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案

  8. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  9. ruby - Ruby 中的隐式返回值是怎么回事? - 2

    所以我开始关注ruby​​,很多东西看起来不错,但我对隐式return语句很反感。我理解默认情况下让所有内容返回self或nil但不是语句的最后一个值。对我来说,它看起来非常脆弱(尤其是)如果你正在使用一个不打算返回某些东西的方法(尤其是一个改变状态/破坏性方法的函数!),其他人可能最终依赖于一个返回对方法的目的并不重要,并且有很大的改变机会。隐式返回有什么意义?有没有办法让事情变得更简单?总是有返回以防止隐含返回被认为是好的做法吗?我是不是太担心这个了?附言当人们想要从方法中返回特定的东西时,他们是否经常使用隐式返回,这不是让你组中的其他人更容易破坏彼此的代码吗?当然,记录一切并给出

  10. ruby-on-rails - ruby 日期方程不返回预期的真值 - 2

    为什么以下不同?Time.now.end_of_day==Time.now.end_of_day-0.days#falseTime.now.end_of_day.to_s==Time.now.end_of_day-0.days.to_s#true 最佳答案 因为纳秒数不同:ruby-1.9.2-p180:014>(Time.now.end_of_day-0.days).nsec=>999999000ruby-1.9.2-p180:015>Time.now.end_of_day.nsec=>999999998

随机推荐