2015-05-12 2 views
0

Используя Parse.com, я хочу получить объект из локальной базы данных, обновить поле и сохранить его обратно в Parse Cloud ... вот мой код:IllegalArgumentException при попытке обновить объект с помощью Parse

String objId = getIntent().getStringExtra("EXTRA_OBJ_ID"); 

ParseQuery<ParseObject> query = ParseQuery.getQuery("someTable"); 
query.fromLocalDatastore(); 
query.getInBackground(objId, new GetCallback<ParseObject>() { 
    @Override 
    public void done(ParseObject parseObject, ParseException e) { 
     if (e == null) { 
      Date expiry = parseObject.getDate("expiryDate"); 
      long millis = expiry.getTime(); 
      Date current = new Date(); 
      parseObject.add("expiryDate", current); 
      parseObject.saveInBackground(new SaveCallback() { 
       @Override 
       public void done(ParseException e) { 
        if (e == null) { 
         //success 
        } else { 
         Log.e(TAG, e.toString()); 
        } 
       } 
      }); 
     } else { 
      Log.e(TAG, e.toString()); 
     } 
    } 
}); 

но parseObject.add("expiryDate", current); я получаю следующее исключение:

java.lang.IllegalArgumentException: Operation is invalid after previous operation. 
     at com.parse.ParseAddOperation.apply(ParseAddOperation.java:71) 
     at com.parse.ParseObject.performOperation(ParseObject.java:2725) 
     at com.parse.ParseObject.addAll(ParseObject.java:2813) 
     at com.parse.ParseObject.add(ParseObject.java:2799) 
     at com.app.ConversationActivity$8.done(ConversationActivity.java:297) 
     at com.app.ConversationActivity$8.done(ConversationActivity.java:283) 
     at com.parse.Parse$5$1.run(Parse.java:924) 
     at android.os.Handler.handleCallback(Handler.java:733) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:212) 
     at android.app.ActivityThread.main(ActivityThread.java:5151) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684) 
     at dalvik.system.NativeStart.main(Native Method) 

Мой код почти копировать-вставить из PARSE документы, за исключением того, что я запрашивая от местного датасторе ... так как я могу сделать эта работа? Большое спасибо!

ответ

0

Не выполнять следующие действия: parseObject.add ("expiryDate", current);

вместо этого: parseObject.put ("expiryDate", current);

Из документации PARSE в

добавить (ключ String, значение Object) атомарной добавляет объект к концу массива, связанного с данным ключом.

«expiryDate» не является массивом, это поле даты для вашего ParseObject в «someTable». Таким образом, вы просто хотите обновить его значение с помощью вызова, а не добавления.

Положительная операция - это то, что вы ищете, и должно работать.

Примечание: Вы можете использовать saveEventually(), чтобы сохранить его в облаке, а также в локальном хранилище данных. Так как кажется, вы пытаетесь также отключить приложение Parse.

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