使用Parse.com,我想从本地数据库中检索一个对象,更新一个字段并将其保存回Parse Cloud ......到目前为止,这是我的代码:
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 :(得分:0)
不要执行以下操作: parseObject.add(“expiryDate”,current);
,请执行此操作: parseObject.put(“expiryDate”,current);
来自Parse的文档
add(String key,Object value)以原子方式将对象添加到与给定键关联的数组的末尾。
“expiryDate”不是数组,它是“someTable”中ParseObject的Date字段。所以你只想通过调用put来更新它的值,而不是添加。
put操作就是你要找的,应该可以工作。
旁注: 您可能希望使用saveEventually()来保存到云,也可以保存到本地数据存储区。因为您似乎也在试图使您的Parse应用程序脱机。