2015-06-03 33 views
1

我已經設置瞭解析和推送通知工作得很好。從解析安裝表中刪除一行從android

我想要實現的是刪除一個包含舊的'installationId'的行(安裝實例)。當重新安裝應用程序時,會生成一個新的installationId,並且在將新的installationId保存在我自己的服務器中之後,我希望android設備從包含舊ID的parse db中刪除行。

我已經按照兩個教程:

ⅰ)Delete a row from Parse Table ⅱ)https://www.parse.com/questions/delete-row

代碼 - (根據第一教程):

ParseQuery<ParseObject> query = ParseQuery.getQuery("Installation"); 
     query.whereEqualTo("installationId", "9702fcb1-5912-43fa-9248-5f18bd398485"); 
     query.getFirstInBackground(new GetCallback<ParseObject>() { 
      @Override 
      public void done(ParseObject parseObject, ParseException e) { 
       try { 
        parseObject.delete(); 
        parseObject.saveEventually(); 
       }catch(ParseException ex){ 
        ex.printStackTrace(); 
       } 
      } 
     }); 

錯誤(logcat的):

4052-4052/com.pbc.pchakraverti.enotice E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.pbc.pchakraverti.enotice, PID: 4052 
    java.lang.NullPointerException: Attempt to invoke virtual method 'void com.parse.ParseObject.delete()' on a null object reference 
      at com.example.pchakraverti.enotice.clgIdVerificationActivity$1.done(clgIdVerificationActivity.java:68) 
      at com.example.pchakraverti.enotice.clgIdVerificationActivity$1.done(clgIdVerificationActivity.java:64) 
      at com.parse.ParseTaskUtils$2$1.run(ParseTaskUtils.java:107) 
      at android.os.Handler.handleCallback(Handler.java:739) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5221) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

碼 - 根據解析文檔:

ParseObject.createWithoutData("Installation", "IHgT4Gbszs").deleteEventually(); 

在這種情況下,沒有異常,但該行沒有被刪除!

我針對'安裝'類的解析。 Parse Installation Class

更新

ParseQuery<ParseInstallation> query = ParseInstallation.getQuery(); 
     query.whereEqualTo("installationId", "9702fcb1-5912-43fa-9248-5f18bd398485"); 
     query.getFirstInBackground(new GetCallback<ParseInstallation>() { 
      @Override 
      public void done(ParseInstallation parseInstallation, ParseException e) { 
       try { 
        parseInstallation.delete(); 
        parseInstallation.saveInBackground(); 
       }catch(ParseException ex){ 
        ex.printStackTrace(); 
       } 
      } 
     }); 

此代碼運行沒有問題,但該條目不會從解析服務器中刪除。

+0

在我沒有那麼好的經驗(wiith解析),我已經看到需要時間來反映一些變化。這顯然不能回答您的問題,但建議您嘗試等待一段時間才能顯示更改,除非您已有。 – SlashG

+0

請記住!但現在沒有機會! – Priyabrata

+0

你可以試着用回調來保存(我希望他們仍然有這個功能)並記錄事件。您將知道保存行/更新/刪除的代碼是否已成功完成。 – SlashG

回答

2

我認爲你需要使用ParseInstallation.getQuery()而不是ParseQuery.getQuery("Installation")

+0

我已根據您的建議更新了代碼。這運行無例外,但相應的條目不會被刪除。 – Priyabrata

+0

您發佈的代碼也不檢查'GetCallback'中的異常。在繼續刪除之前,您應該檢查它是否爲空,如果該錯誤不爲空則記錄該錯誤。 – nasch

0

你不能做到這一點

這行代碼:

ParseObject parseObject = ParseInstallation.getQuery().getFirst(); 

拋出異常:

com.parse.ParseRequest$ParseRequestException: Clients aren't allowed to perform the find operation on the installation collection.