我已经设置了解析和推送通知工作正常。
我想要实现的目标是删除包含旧版“installId”的行(安装实例)。当重新安装app时,会生成一个新的installationId,并且在我自己的服务器中保存新的installationId之后,我希望android设备从包含旧id的解析db中删除该行。
我已经关注了两个教程:
i)Delete a row from Parse Table ii)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();
在这种情况下,没有例外,但该行不会被删除!
我的目标是安装&#39;解析类。
更新
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 :(得分:2)
我认为您需要使用ParseInstallation.getQuery()
代替ParseQuery.getQuery("Installation")
。
答案 1 :(得分:0)
你不被允许这样做
这行代码:
ParseObject parseObject = ParseInstallation.getQuery().getFirst();
抛出异常:
com.parse.ParseRequest$ParseRequestException: Clients aren't allowed to perform the find operation on the installation collection.