2015-01-18 2 views
1

Я сделал findInBackground запрос для получения списка объектов. После этого я создаю мои собственные объекты из результатов я получил:Как удалить ParseObject, если у меня есть только objectID?

query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(final List<ParseObject> hangOutList, ParseException e) { 
      if (e == null) { 
       for (int i = 0; i < hangOutList.size(); i++) { 
        String objectID= hangOutList.get(i).getObjectId(); 
        String city = hangOutList.get(i).getString("City"); 
        String name = hangOutList.get(i).getString("Name"); 
        String createdBy = 
          hangOutList.get(i).getString("CreatedBy"); 
        HangOut ho=new HangOut(objectID, name, city, createdBy); 
        hangOuts.add(ho); 
       } 

Теперь, когда я нажимаю на одном из них, я хочу, чтобы иметь возможность удалить его. В документации они говорят, что делают это: myObject.deleteInBackground();

Однако у меня нет ParseObject, поэтому я не могу этого сделать. Прямо сейчас я пытался сделать что-то вроде этого:

private void deleteHangout() { 
    ParseObject po=new ParseObject("HangOut"); 
    po.setObjectId(hangOut.getObjectID()); 
    po.deleteInBackground(); 
} 

Это не работает. Есть ли способ создания объекта Parse по ID. Или любая другая идея?

Я получаю ошибку после выполнения deleteHangout:

01-18 13:41:07.659 1716-1716/com.parse.starter E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.RuntimeException: Attempted to change an objectId to one that's 
     already known to the Offline Store. 
     at com.parse.OfflineStore.updateObjectId(OfflineStore.java:598) 
     at com.parse.ParseObject.setObjectIdInternal(ParseObject.java:1106) 
     at com.parse.ParseObject.setObjectId(ParseObject.java:1094) 
     at com.parse.starter.HangOuts. 
      HangOutDetail.deleteHangout(HangOutDetail.java:61) 
     at com.parse.starter.HangOuts. 
      HangOutDetail.access$000(HangOutDetail.java:16) 
     at com.parse.starter.HangOuts. 
      HangOutDetail$1.onClick(HangOutDetail.java:54) 
     at android.view.View.performClick(View.java:4204) 
     at android.view.View$PerformClick.run(View.java:17355) 
     at android.os.Handler.handleCallback(Handler.java:725) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5041) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os. 
      ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
     at dalvik.system.NativeStart.main(Native Method) 

Примечание: Я хочу, чтобы избежать ненужных вызовов на сервер.

+0

Вы можете просто инициализировать новый объект синтаксического анализа с этим идентификатором и применить к нему удаление – Kiloreux

+0

Разве это не то, что я сделал? Последний раздел кода моего вопроса? Или? Не стесняйтесь ответить на вопрос на примере. Спасибо. –

+0

Вы пытались запустить обратный вызов delete? – Kiloreux

ответ

5

Что вы делаете, так это то, что вы создаете объект, а затем вызываете метод на другой объект, который вы только что создали, чтобы сделать то, что вам нужно, чтобы создать объект Parse без data, а затем попытайтесь использовать метод deleteEventually поэтому он сначала удаляет объект локально, и даже если он отключен и один раз подключен, он удалит его с серверов.

ParseObject po= ParseObject.createWithoutData("HangOut", hangOut.getObjectID()); 
po.deleteEventually(); 
+0

То, что мне нужно! Отличный ответ, +1. –

+1

Он не работает в случае ParseUser.ParseUser.createWithoutData («Пользователь», «id»). Что делать в случае с ParseUser –

Смежные вопросы