我們正在爲我們的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