如何从android中的Parse User类中删除整行?我希望用户能够从我的应用程序中删除他们的帐户,如果他们删除了他们的帐户,我希望能够删除他们的整个用户行。
答案 0 :(得分:4)
在用户对象上调用其中一种删除方法:delete()
,deleteEventually()
,deleteInBackground()
等。
示例:
ParseUser user = ParseUser.getCurrentUser();
user.deleteInBackground();
ParseUser类是ParseObject的子类,因此它具有所有相同的删除方法。您可以查看API参考here以获取更多信息。
答案 1 :(得分:1)
我想我会针对您需要删除用户的情况略有不同提供额外的反馈。我使用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();
}
}
}
});
答案 2 :(得分:0)
由于在删除方法之后无法注销/清除本地数据存储区,因此接受的答案可能会产生错误。
1)根据Parse的文档,delete()并不总是足以删除和注销用户。有时,即使在delete()调用之后,用户仍然通过本地数据存储区登录,导致下次用户打开应用程序时出现错误(或者只是下次应用程序使用getCurrentUser()方法检查当前用户时。相反,必须在delete函数的回调中调用logout,如下所示:
ParseUser currentUser = ParseUser.getCurrentUser();
currentUser.deleteInBackground(new DeleteCallback() {
public void done(ParseException e) {
if (e == null) {
currentUser.logOutInBackground();
} else {
//handle the error
}
}
});
这是违反直觉的,因为如果帐户已被删除,您认为不应该注销,但是您可以这样做。
2)另外值得注意的是,只有在用户通过身份验证(使用login(),signup()或getCurrentUser()API调用)时才能调用delete。从Parse文档: 具体来说,除非使用经过身份验证的方法(如logIn或signUp)获取ParseUser,否则无法调用任何保存或删除类型方法。这可确保只有用户才能更改自己的数据。