如何从 android 中的 Parse User 类中删除整行?我希望用户能够从我的应用程序中删除他们的帐户,如果他们删除他们的帐户,我希望能够删除他们的整个用户行。
3 回答
在用户对象上调用其中一种删除方法:delete()
、deleteEventually()
、deleteInBackground()
等。
例子:
ParseUser user = ParseUser.getCurrentUser();
user.deleteInBackground();
ParseUser 类是 ParseObject 的子类,因此它具有所有相同的删除方法。您可以在此处查看 API 参考以获取更多信息。
我想我会针对需要删除用户的稍微不同的情况提供额外的反馈。我使用 Eric Amorde 给出的答案作为起点,但在运行测试时我不得不删除用户。基本目标是在用户注册后从解析数据库中删除用户。这将使我不必在每次运行测试时都进入并删除用户。我最初使用在静态方法中发布的上述代码 Eric Amorde,但没有得到任何结果。由于我是在后台注册过程中创建用户,因此我还必须在后台删除用户。其他人可能知道我应该使用的更好方法,但下面是代码片段,其中包括我在线程在后台工作时所做的所有事情。
user.signUpInBackground(new SignUpCallback() {
@Override
public void done(ParseException e) {
dlog.dismiss();
if (e != null) {
/**
* Show the error message
*/
Toast.makeText(RegisterActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
} else {
/**
* Start a new intent for the dispatch activity
*/
Intent intent = new Intent(RegisterActivity.this, DispatchActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
RegisterActivity.this.startActivity(intent);
/**
* Check to see if the username is ParseUser and immediately deletes from
* Parse database to allow repeated runs of the RegisterActivityEspressoTest
*/
if(etUsername.getText().toString().equals("ParseUser")){
ParseUser registerTestUser = new ParseUser();
registerTestUser.getCurrentUser().deleteInBackground();
}
}
}
});
由于在删除方法之后未能注销/清除本地数据存储,接受的答案可能会产生错误。
1) 根据 Parse 的文档, delete() 并不总是足以删除和注销用户。有时,即使在 delete() 调用之后,用户仍然通过本地数据存储保持登录状态,这会导致用户下次打开应用程序时出现错误(或者只是下次应用程序使用 getCurrentUser() 方法检查当前用户时)。相反,必须在删除函数的回调中调用注销,如下所示:
ParseUser currentUser = ParseUser.getCurrentUser();
currentUser.deleteInBackground(new DeleteCallback() {
public void done(ParseException e) {
if (e == null) {
currentUser.logOutInBackground();
} else {
//handle the error
}
}
});
这是违反直觉的,因为如果帐户已被删除,您会认为您不必注销,但您确实这样做了。
2) 另外值得注意的是,delete 只能在用户通过身份验证时调用(使用 login()、signup() 或 getCurrentUser() API 调用)。来自 Parse 文档: 具体来说,您无法调用任何保存或删除类型的方法,除非 ParseUser 是使用经过身份验证的方法(如 logIn 或 signUp)获得的。这确保只有用户可以更改他们自己的数据。