我正在使用ParseUser进行用户管理。拥有用户名(唯一),我计划查询User类以识别用户,然后将新分数添加到“score”字段,就像排行榜一样。编码如下:
public void update_user_score(String username, int original_score, int add)
{
final int new_score = original_score + add;
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("username", username);
query.setLimit(1);
query.findInBackground(new FindCallback()
{
public void done(final ParseObject object, ParseException e)
{
if (e == null)
{
object.saveInBackground(new SaveCallback()
{
public void done(ParseException e)
{
object.put("score", new_score);
object.saveInBackground();
onBackPressed();
}
});
}
}
});
}
情况:
它声明The type new FindCallback(){} must implement the inherited abstract method FindCallback.done(List, ParseException)
。我试过FindCallback.done
并发现它不成功。
我想问一下如何使用给定的用户名更新用户的其他字段?谢谢!
答案 0 :(得分:4)
根据解析文档说,
默认情况下,ParseUser类是安全的。存储在ParseUser中的数据只能由该用户修改。默认情况下,任何客户端仍可读取数据。因此,一些ParseUser对象被认证并且可以被修改,而其他对象是只读的。
具体来说,除非使用经过身份验证的方法(如logIn或signUp)获取ParseUser,否则无法调用任何保存或删除类型方法。这可确保只有用户才能更改自己的数据。
以下说明了此安全策略:
ParseUser user = ParseUser.logIn("my_username", "my_password");
user.setUsername("my_new_username"); // attempt to change username
user.saveInBackground(); // This succeeds, since the user was authenticated on the device
// Get the user from a non-authenticated manner
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.getInBackground(user.getObjectId(), new GetCallback<ParseUser>() {
public void done(ParseUser object, ParseException e) {
object.setUsername("another_username");
// This will throw an exception, since the ParseUser is not authenticated
object.saveInBackground();
}
});
请浏览此链接Reference
答案 1 :(得分:1)
public void update_user_score(String username, int original_score, int add)
{
final int new_score = original_score + add;
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("username", username);
query.setLimit(1);
query.findInBackground(new FindCallback()
{
public void done(final ParseUser object, ParseException e)
{
if (e == null)
{
object.put("score", new_score);
object.saveInBackground(new SaveCallback()
{
public void done(ParseException e)
{
if(e==null)
onBackPressed();
}
});
}
}
});
}
答案 2 :(得分:0)
据我所知,你的问题是;您希望通过使用指定的用户ID在用户表中查找用户条目并更新分数字段。第一个建议,而不是findInBackground使用getFirstInBackground。然后检查返回的用户对象,如果不是null,则执行用户更新操作。然后调用saveInBackground。 saveInBackground用于保存成功时的perfroming操作。在您的代码中,我看到您尝试再次使用done方法保存对象。另外,一个建议是控制ACL。
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.getFirstInBackground(someUserId, new GetCallback<ParseUser>() {
public void done(ParseUser user, ParseException e) {
if (e == null) {
// No error e is null
// check user object
if (user == null) {
// no user , error
} else {
// perfrom save operation
// put score field
// call save in background
// in done method update UI for example.
}
} else {
// Something went wrong.
}
}
});