【发布时间】:2015-06-13 22:31:36
【问题描述】:
我让用户更改他的凭据。 他输入新的用户名、电子邮件和密码,然后我会这样:
ParseUser user = ParseUser.getCurrentUser();
user.setUsername("MY NEW NAME");
user.setEmail(email);
user.setPassword("MY NEW PW");
user.saveInBackground(...);
那又怎样?所以这个save() 调用可能会失败,原因有很多(例如:用户名已被其他人占用)。我可以说,在这种情况下,上述字段都没有更新,这是公平的:我显示一个错误,用户知道一切都出错了。
如果您注意到即使在ParseException 之后,上面的user 仍保留其脏字段,则事情会变得复杂,这些字段无法保存到服务器。即
//saveInBackground fails
//...
user.getUsername().equals("MY NEW NAME") // true!
问题
现在,我可以通过调用 user.fetch() 将这些字段恢复为正确的值,但这不适用于 password 字段。
这是特别不需要的,因为将来对save() 或类似的任何调用(可能不会失败,因为它可能是一个完全不同的调用)也会更新密码!即
//later
ParseUser user = ParseUser.getCurrentUser();
user.put("stuff");
user.save();
这不仅会放入“东西”,而且还会将密码更改为“MY NEW PW”.. 用户不知道。
除了无效的fetch() 之外,还有什么方法可以重置本地password 字段?我知道我可以使用三个不同的查询保存用户名、电子邮件和密码,但这不是我的情况的可能解决方案。
【问题讨论】:
-
试试这个:“撤消”不适用于 android-swipe-to-dismiss-undo setOnItemClickListener 对我不起作用。这是因为我在适配器中使用了 OnLongClickListener 和 setOnCheckedChangeListener?
-
``` ParseUser user = ParseUser.getCurrentUser(); ParseUser oriUser = user.fetch(); // 返回一个 ParseUser 实例,这是你想要的吗? oriUser.setPassword.equals(""我的新密码""); // 对或错 ? ```
-
但是我觉得这不是一个好办法,fetch() 会添加一次net access,正确的办法是在更新值之前自己bak in local
-
@aWang 我没有使用
ParseUser user2 = user.fetch()进行测试,我单独调用user.fetch()然后查询ParseUser.getCurrentUser()。这是最常见的情况,因为稍后在应用程序中我需要调用ParseUser.getCurrentUser().save()。我希望ParseUser.getCurrentUser()恢复到以前的密码。