调用Parse.User.logOut

时间:2015-10-19 18:32:52

标签: android parse-platform

我在按下操作栏按钮时尝试注销当前用户。这是我使用的代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_logout) {
        ParseUser.logOutInBackground(new LogOutCallback() {
            public void done(ParseException e) {
                if (e == null) {
                    ParseUser currentUser = ParseUser.getCurrentUser();
                    if (currentUser == null) {
                        Intent intent = new Intent(WelcomeActivity.this, DispatchActivity.class);
                        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                    } else {
                        Toast.makeText(WelcomeActivity.this, "Still logged in.", Toast.LENGTH_LONG)
                                .show();
                    }

                } else {
                    Toast.makeText(WelcomeActivity.this, "Error msg:" + e, Toast.LENGTH_LONG)
                            .show();
                }
            }
        });
        return true;
    }
    return super.onOptionsItemSelected(item);
}

问题是,当我按下按钮时,我收到消息:Still logged in.。这意味着调用了ParseUser.logOut,但ParseUser.getCurrentUser()未设置为null。我没有在Logcat中收到关于Parse的任何消息。

我需要currentUser为null的原因是因为我使用这段代码来检查是否有用户缓存:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Check if there is current user info
    if (ParseUser.getCurrentUser() != null) {
        // Start an intent for the logged in activity
        startActivity(new Intent(this, WelcomeActivity.class));
    } else {
        // Start and intent for the logged out activity
        startActivity(new Intent(this, MainActivity.class));
    }
}

为什么在调用ParseUser.getCurrentUser()时没有ParseUser.logOut设置为空?我的问题还有另一个解决方案吗?

我使用的是Parse版本1.10.3。

编辑: 要将Parse初始化为我的项目,我使用名为ParseApplication.java的应用程序文件。

public class ParseApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        Parse.enableLocalDatastore(this);
        Parse.initialize(this, "1IwScbCSI157HcqFWCyR3qF8pqqGfNwPDoXnjyAd", "yIyVXPLM8h7V0ISGL3IxPaIqoUisK4w26EkWzs2W");
        ParseACL defaultACL = new ParseACL();
        ParseACL.setDefaultACL(defaultACL, true);
    }

}

.java文件在我的AndroidManifest.xml

中声明为应用程序
<application
        android:name=".ParseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/app_logo"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    <meta-data
        android:name="com.parse.APPLICATION_ID"
        android:value="@string/parse_app_id" />
    <meta-data
        android:name="com.parse.CLIENT_KEY"
        android:value="@string/parse_client_key" />

EDIT2:

我对我的项目进行了一些研究,发现我在另一个.java文件中意外地声明了Parse.enableLocalDatastore(this);。我从我的文件中删除了它,现在它就像一个魅力。这是导致我的应用程序崩溃的问题。

1 个答案:

答案 0 :(得分:0)

您是否在应用程序中将ParseUser子类化?如果是,那就试试那个班级。此外,如果您启用了自动用户创建,则注销和获取用户将返回匿名用户。默认情况下处于启用状态。

希望这可以帮助你。