【发布时间】:2014-09-03 15:18:48
【问题描述】:
我们正在为我们的 android 客户端使用 Parse,但缓存有问题。
每台设备都有一个他们注册的唯一频道。如果我上网并在数据浏览器中删除频道,设备仍然认为它已经注册。如果我为频道调用订阅,则似乎没有进行此调用,我的猜测是它检查本地缓存,并且由于这说它已经注册,因此它将进行此调用。
如果我调用此方法 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();我可以看到他们下载了列表,但他们没有删除错误的频道。取消注册也只是删除在线的东西。因此,如果我的本地列表中有更多并且它们不在线,它可以工作,但如果它们在线,则无法删除它们。
-
你解决了这个问题吗?我也有类似的问题...