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

android– 移动后端启动器连续查询永不返回,第1张

概述我根据this教程为移动后端入门应用编写了一个Android客户端.一切都可以实现连续查询的部分.我编写了一个查询,我从代码中的正确位置(onPostCreate())调用它,但查询从不返回任何数据.我不相信这是一个身份验证问题,因为我能够成功地进行其他调用.这是永远不会返回结果的代码:Clo

我根据this教程为移动后端入门应用编写了一个AndroID客户端.一切都可以实现连续查询的部分.

我编写了一个查询,我从代码中的正确位置(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 one rror(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 repo下载了完整的源代码,并且该代码存在同样的问题.
我也尝试过多次重新部署后端服务器.

解决方法:

好的,我终于解决了这个问题!问题出现在清单和类GCMIntentService.java中

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

<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和身份验证.需要注意的是,我仍然遵循教程并使用Web应用程序 – >注册GCM服务器密钥和Web客户端ID时是通用的.注册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 – 移动后端启动器连续查询永不返回全部内容,希望文章能够帮你解决android – 移动后端启动器连续查询永不返回所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存