gpt4 book ai didi

android - 解析 Android : subscribe/unsubscribe not really coherent with online

转载 作者:行者123 更新时间:2023-11-29 21:02:22 24 4
gpt4 key购买 nike

我们正在为我们的 android 客户端使用 Parse,但存在缓存问题。

每个设备都有一个唯一的注册 channel 。如果我上网并删除数据浏览器中的 channel ,设备仍然认为它已经注册。如果我为该 channel 调用订阅,它似乎没有进行此调用,我的猜测是它会检查本地缓存,因为这表明它已经注册,所以它会进行此调用。

如果我调用此方法 PushService.getSubscriptions,它会给我一个与在线内容不一致的 channel 列表。某处说 PushService.getSubscriptions 在本地缓存,这真的很奇怪吗?

然后我尝试做这样的事情来确保它总是更新到最新:

    PushService.setDefaultPushCallback(this, null);
Set<String> channels = PushService.getSubscriptions(_context);
for(String channel : channels){
PushService.unsubscribe(this, channel);
}
PushService.setDefaultPushCallback(this, RD4MainV4Activity.class);
PushService.subscribe(this, licenseKeyValue, RD4MainV4Activity.class);

但是我得到了错误。我试过以不同的顺序做这些,但无论我做什么,我都会遇到问题。

09-03 17:13:45.494: E/AndroidRuntime(29029): java.lang.RuntimeException: java.lang.IllegalArgumentException: Operation is invalid after previous operation.
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.PushRouter$8$1.run(PushRouter.java:235)
09-03 17:13:45.494: E/AndroidRuntime(29029): at android.os.Handler.handleCallback(Handler.java:733)
09-03 17:13:45.494: E/AndroidRuntime(29029): at android.os.Handler.dispatchMessage(Handler.java:95)
09-03 17:13:45.494: E/AndroidRuntime(29029): at android.os.Looper.loop(Looper.java:136)
09-03 17:13:45.494: E/AndroidRuntime(29029): at android.app.ActivityThread.main(ActivityThread.java:5001)
09-03 17:13:45.494: E/AndroidRuntime(29029): at java.lang.reflect.Method.invokeNative(Native Method)
09-03 17:13:45.494: E/AndroidRuntime(29029): at java.lang.reflect.Method.invoke(Method.java:515)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-03 17:13:45.494: E/AndroidRuntime(29029): at dalvik.system.NativeStart.main(Native Method)
09-03 17:13:45.494: E/AndroidRuntime(29029): Caused by: java.lang.IllegalArgumentException: Operation is invalid after previous operation.
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.ParseAddUniqueOperation.apply(ParseAddUniqueOperation.java:96)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.ParseObject.performOperation(ParseObject.java:2734)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.ParseObject.addAllUnique(ParseObject.java:2850)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.ParseObject.addUnique(ParseObject.java:2835)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.PushRouter.subscribe(PushRouter.java:618)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.PushRouter$1.then(PushRouter.java:72)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.PushRouter$1.then(PushRouter.java:69)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task$10.run(Task.java:448)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task$ImmediateExecutor.execute(Task.java:673)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task.completeImmediately(Task.java:444)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task.continueWith(Task.java:318)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task.continueWith(Task.java:329)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task$8.then(Task.java:381)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task$8.then(Task.java:373)
09-03 17:13:45.494: E/AndroidRuntime(29029): at com.parse.Task$11.run(Task.java:481)
09-03 17:13:45.494: E/AndroidRuntime(29029): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-03 17:13:45.494: E/AndroidRuntime(29029): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-03 17:13:45.494: E/AndroidRuntime(29029): at java.lang.Thread.run(Thread.java:841)

我的梦想 senario 是我可以获得该设备的在线版本。然后检查它是否正确,如果 channel 丢失或设备注册了错误的 channel ,则修复此问题。

我可以用任何方式检查吗?

最佳答案

我遇到过类似的问题,但能够通过一些技巧解决。

使用当前版本的 Parse(撰写本文时为 1.9.2),您订阅 channel 的方式是使用 ParsePush.subscribeInBackground(channelname)。此方法自动将字符串“channelname”添加到用户安装对象中名为“channels”的字符串数组中,但无论如何,对我来说,抛出了上面给出的相同错误:

java.lang.RuntimeException: java.lang.IllegalArgumentException: Operation is invalid after previous operation.

我能够解决这个问题的方法是编写我自己的 subscribeInBackground 版本,它是这样的:

ParseInstallation.getCurrentInstallation().put("channels",
Arrays.asList(new String[]{
"channelname"
}));
ParseInstallation.getCurrentInstallation().saveInBackground();

要取消订阅,只需执行相反的操作:

ParseInstallation.getCurrentInstallation().put("channels",
Arrays.asList(new String[]{})); //Put the empty list to unsubcribe!
ParseInstallation.getCurrentInstallation().saveInBackground();

这依赖于您管理 channel 数组,但不会莫名其妙地崩溃。

关于android - 解析 Android : subscribe/unsubscribe not really coherent with online,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25648039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com