FLAG_ACTIVITY_CLEAR_TOP无法正常工作

5
我遇到了FLAG_ACTIVITY_CLEAR_TOP的问题。当用户启动应用程序时,会出现一个屏幕,让他们登录或注册。一旦用户登录应用程序,我希望关闭所有先前的活动。当我按下返回按钮时,它会注销用户并将其带回LAUNCHER活动。
以下是我的登录活动:
public class login extends AsyncTask<String, String, String>{

        //Declaring global variables to be used throughout asyn class

         String email;
         String password;
         UserFunctions userFunction;
         JSONObject json;


        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pDialog = new ProgressDialog(LoginActivity.this);
            pDialog.setMessage("Logging into Thryfting...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(false);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            publishProgress();

                email = inputEmail.getText().toString();
                password = inputPassword.getText().toString();
                userFunction = new UserFunctions();
                json = userFunction.loginUser(email, password);


            // check for login response
            try {
                //if (json.getString(KEY_SUCCESS) != null) {
                    String res = json.getString(KEY_SUCCESS);
                    if(Integer.parseInt(res) == 1){
                        // user successfully logged in
                        // Store user details in SQLite Database
                        DatabaseHandler db = new DatabaseHandler(getApplicationContext());
                        JSONObject json_user = json.getJSONObject("user");

                        // Clear all previous data in database
                        userFunction.logoutUser(getApplicationContext());
                        db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL), json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));                        


                    }

            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
                // TODO Auto-generated method stub
                pDialog.dismiss();

                 email = inputEmail.getText().toString();
                 password = inputPassword.getText().toString();
                 userFunction = new UserFunctions();
                 json = userFunction.loginUser(email, password);

                try {
                    String res = json.getString(KEY_SUCCESS);
                    if(Integer.parseInt(res) == 1){
                     // Launch Dashboard Screen
                    Intent dashboard = new Intent(getApplicationContext(), Timeline.class);

                    // Close all views before launching Dashboard
                    dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(dashboard);

                    // Close Login Screen
                    finish();
                    }
                    else{
                    // Error in registration
                    Toast.makeText(getApplicationContext(), "Wrong Email and password combination", Toast.LENGTH_SHORT).show();
                    }
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

1
不确定您想要实现什么,但感觉您误解了FLAG_ACTIVITY_CLEAR_TOP的效果。通常情况下,您会使用它来返回已经在堆栈中的Activity,而不是在堆栈顶部启动此Activity的新实例。 - Egor
@egor 用户登录后,我希望关闭主要的登录和注册活动。这样当他们按下返回按钮时,就不会注销他们的登录状态。 - GOAT
2个回答

1
如果您在登录活动中调用了finish(),那么FLAG_ACTIVITY_CLEAR_TOP将无法正常工作。
请从此处删除登录活动中的finsh()
startActivity(dashboard);

// Close Login Screen
finish(); //remove this

在你的onPostExecute方法中。


0

不要使用addflags来清除活动,尝试使用这个方法

dashboard.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

这肯定会解决你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接