无Parse Server经验者咨询对象更新方法及创建对象相关问题
如何更新Parse Server中的对象
嘿,刚接触Parse Server是吧?关于对象更新的问题,我结合你已经掌握的创建流程,整理了几种最常用的实现方式,一步步来:
方式一:直接复用已有的对象实例更新
如果你还保留着创建对象时的gameScore实例(比如还在同一个会话、同一个方法里),完全不用重新查询,直接修改属性后调用save()就行:
// 修改已有对象的属性 gameScore.put("score", 1500); // 把分数更新成1500 gameScore.put("cheatMode", true); // 开启作弊模式 // 保存更新 try { gameScore.save(); System.out.println("对象更新成功!"); } catch (ParseException e) { e.printStackTrace(); }
这种方式最省心,因为你的gameScore实例已经带着objectId了,Parse会自动识别这是更新操作,而不是创建新对象。
方式二:通过ObjectId查询后更新
如果已经没有之前的对象实例了(比如重启了应用、或者从其他地方拿到了objectId),那就先通过Query查询到目标对象,再修改保存:
// 创建针对GameScore类的查询 ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore"); // 用你之前获取到的objectId查询具体对象 try { ParseObject gameScore = query.get("这里替换成你的objectId"); // 修改需要更新的属性 gameScore.put("playerName", "新玩家昵称"); gameScore.put("score", 2000); // 保存更新 gameScore.save(); System.out.println("通过ObjectId查询并更新成功!"); } catch (ParseException e) { e.printStackTrace(); }
这是最通用的场景,只要你有对象的objectId,就能随时找到它并更新。
方式三:增量更新(比如分数累加)
如果只是要对数值类属性做加减操作(比如给分数加100),Parse提供了更高效的increment方法,不用先读再写,还能避免并发冲突:
ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore"); try { ParseObject gameScore = query.get("你的objectId"); // 给score属性增加100(如果要减少就传负数,比如-50) gameScore.increment("score", 100); gameScore.save(); System.out.println("分数增量更新成功!"); } catch (ParseException e) { e.printStackTrace(); }
另外提一句,如果你不想阻塞主线程(比如在Android应用里),可以用异步更新的saveInBackground()替代同步的save(),示例如下:
gameScore.saveInBackground(new SaveCallback() { @Override public void done(ParseException e) { if (e == null) { System.out.println("异步更新成功!"); } else { e.printStackTrace(); } } });
内容的提问来源于stack exchange,提问作者Simple
相关产品推荐
相关产品推荐

