我们正在为我们的Android客户端使用Parse,并且存在缓存问题。解析Android:订阅/取消订阅与在线不完全相关
每个设备都有一个他们注册的唯一通道。如果我在网上进入并删除数据浏览器中的频道,设备仍然认为它已经注册。如果我打电话订阅频道看起来好像这个电话没有做,我的猜测是,它检查本地缓存,因为这表示它已经注册它将进行此调用。
如果我将此方法称为PushService.getSubscriptions,它会给我一个与在线内容不一致的频道列表。某处它说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)
我的梦想是我可以得到该设备的在线版本。然后检查它是否正确,如果通道丢失或者是否有错误的通道注册到设备,请检查它是否正确。
我可以用任何方式检查吗?
我现在已经尝试了很多像ParseInstallation.getCurrentInstallation()。refresh();和ParseInstallation.getCurrentInstallation()。fetch();我可以看到他们下载了这个列表,但他们并没有删除那些错误的频道。取消注册也只是删除在线的东西。因此,如果我的本地列表中有更多内容,并且它们不在线,它可以正常工作,但如果它们处于联机状态,则无法删除它 – Ludvig 2014-09-03 16:35:57
你设法弄清楚了吗?我有类似的问题... – chetem 2014-10-24 14:33:42