Java 标记\活动\清除\顶部不工作
我对FLAG\u ACTIVITY\u CLEAR\u TOP有意见。当用户启动应用程序时,会出现一个屏幕供他们登录或注册。一旦用户登录到应用程序,我希望所有以前的活动都关闭。当我按下后退按钮时,它将用户注销,并将他们带回启动器活动 以下是我的登录活动:Java 标记\活动\清除\顶部不工作,java,android,Java,Android,我对FLAG\u ACTIVITY\u CLEAR\u TOP有意见。当用户启动应用程序时,会出现一个屏幕供他们登录或注册。一旦用户登录到应用程序,我希望所有以前的活动都关闭。当我按下后退按钮时,它将用户注销,并将他们带回启动器活动 以下是我的登录活动: public class login extends AsyncTask<String, String, String>{ //Declaring global variables to be used throu
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();
}
公共类登录扩展异步任务{
//声明要在整个asyn类中使用的全局变量
字符串电子邮件;
字符串密码;
用户函数用户函数;
JSONObject json;
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
pDialog=新建进度对话框(LoginActivity.this);
setMessage(“登录到Thryfting…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(假);
pDialog.show();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
出版进度();
email=inputEmail.getText().toString();
password=inputPassword.getText().toString();
userFunction=新的UserFunctions();
json=userFunction.logiuser(电子邮件、密码);
//检查登录响应
试一试{
//if(json.getString(KEY_SUCCESS)!=null){
String res=json.getString(KEY_SUCCESS);
if(Integer.parseInt(res)==1){
//用户已成功登录
//在SQLite数据库中存储用户详细信息
DatabaseHandler db=新的DatabaseHandler(getApplicationContext());
JSONObject json_user=json.getJSONObject(“用户”);
//清除数据库中以前的所有数据
logoutUser(getApplicationContext());
db.addUser(json_user.getString(KEY_NAME)、json_user.getString(KEY_EMAIL)、json.getString(KEY_UID)、json_user.getString(KEY_CREATED_AT));
}
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//TODO自动生成的方法存根
pDialog.disclose();
email=inputEmail.getText().toString();
password=inputPassword.getText().toString();
userFunction=新的UserFunctions();
json=userFunction.logiuser(电子邮件、密码);
试一试{
String res=json.getString(KEY_SUCCESS);
if(Integer.parseInt(res)==1){
//启动仪表板屏幕
意图仪表板=新意图(getApplicationContext(),Timeline.class);
//启动仪表板前关闭所有视图
dashboard.addFlags(意图、标志、活动、清除、顶部);
startActivity(仪表板);
//关闭登录屏幕
完成();
}
否则{
//登记错误
Toast.makeText(getApplicationContext(),“错误的电子邮件和密码组合”,Toast.LENGTH\u SHORT.show();
}
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
如果您正在调用登录活动的finish()
,则标记活动\u CLEAR\u TOP
将不起作用
从此处从登录活动中删除finsh()
startActivity(dashboard);
// Close Login Screen
finish(); //remove this
在OnPostExcute方法中。尝试此方法,而不是使用addflags清除活动
dashboard.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
这肯定会解决您的问题。不确定您想要实现什么,但感觉您误解了FLAG_ACTIVITY_CLEAR_TOP的效果。您通常使用它返回到堆栈中已经存在的活动,而不是在堆栈顶部启动此活动的新实例。@egor一旦用户登录,我希望要关闭的主要、登录和注册活动。因此,当他们按下后退按钮时,不会将其注销