Android 按back使登录表单不可读
我有一个登录表单,在用户输入正确的用户和密码信息后,他们将被带到欢迎表单。我不希望用户在不首先注销的情况下从应用程序中的任何位置返回登录表单。他们返回登录表单的唯一方法是按back。我怎样才能阻止它 编辑: 以下是执行登录的代码Android 按back使登录表单不可读,android,android-intent,android-asynctask,Android,Android Intent,Android Asynctask,我有一个登录表单,在用户输入正确的用户和密码信息后,他们将被带到欢迎表单。我不希望用户在不首先注销的情况下从应用程序中的任何位置返回登录表单。他们返回登录表单的唯一方法是按back。我怎样才能阻止它 编辑: 以下是执行登录的代码 private class UserLoginTask extends AsyncTask<String, Void, User> { @Override protected User doInBackground(Stri
private class UserLoginTask extends AsyncTask<String, Void, User> {
@Override
protected User doInBackground(String... params) {
User user;
try {
user = RestCommunicator.authenticateUser(params[0], params[1]);
} catch (NetworkException e) {
user = new User();
user.setResponseStatus("Network Error");
}
return user;
}
@Override
protected void onPostExecute(User result) {
if (result != null && result.getUsername() != null
&& !result.getResponseStatus().equals("Network Error")
&& !result.getResponseStatus().equals("wrong-user")
&& !result.getResponseStatus().equals("wrong-password")) {
Log.d("result", "*" + result.getResponseStatus() + "*");
userDao.insertOrReplace(result);
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
Editor editor = sharedPreferences.edit();
editor.putBoolean("loggedin", true);
editor.commit();
super.onPostExecute(result);
Intent intent = new Intent(SplashActivity.this,
WelcomeActivity.class);
startActivity(intent);
finish();
} else {
Intent intent = new Intent(SplashActivity.this,
LoginErrorActivity.class);
intent.putExtra("error", result.getResponseStatus());
startActivityForResult(intent, 90000);
}
}
}
私有类UserLoginTask扩展异步任务{
@凌驾
受保护的用户doInBackground(字符串…参数){
用户;
试一试{
user=RestCommunicator.authenticateUser(参数[0],参数[1]);
}捕获(NetworkException e){
user=新用户();
user.setResponseStatus(“网络错误”);
}
返回用户;
}
@凌驾
受保护的void onPostExecute(用户结果){
如果(result!=null&&result.getUsername()!=null
&&!result.getResponseStatus().equals(“网络错误”)
&&!result.getResponseStatus().equals(“错误用户”)
&&!result.getResponseStatus().equals(“错误的密码”)){
Log.d(“result”、“*”+result.getResponseStatus()+“*”);
userDao.insertOrReplace(结果);
SharedPreferences SharedPreferences=首选项管理器
.GetDefaultSharedReferences(getBaseContext());
Editor=SharedReferences.edit();
编辑器.putBoolean(“loggedin”,true);
commit();
super.onPostExecute(结果);
意向意向=新意向(SplashActivity.this,
欢迎参加(活动,班级),;
星触觉(意向);
完成();
}否则{
意向意向=新意向(SplashActivity.this,
LoginErrorActivity.class);
intent.putExtra(“错误”,result.getResponseStatus());
startActivityForResult(意向,90000);
}
}
}
添加标志Intent。在您的意图中添加标志\u ACTIVITY\u CLEAR\u TOP
,它将从活动堆栈中删除SplashActivity
Intent intent = new Intent(SplashActivity.this, WelcomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
或,您可以通过将true
设置为android:noHistory
在Manifest.xml
文件中执行相同的任务,当您按照以下方式声明您的活动时
<activity
android:name=".SplashActivity"
android:noHistory="true" >
UserLoginTask loginTask = new UserLoginTask(SplashActivity.this);
loginTask.execute();
然后在活动中调用AsyncTask
,如下所示
<activity
android:name=".SplashActivity"
android:noHistory="true" >
UserLoginTask loginTask = new UserLoginTask(SplashActivity.this);
loginTask.execute();
添加标志
Intent。将活动标志\u CLEAR\u TOP
添加到您的意图中…它将从活动堆栈中删除活动标志
Intent intent = new Intent(SplashActivity.this, WelcomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
或,您可以通过将true
设置为android:noHistory
在Manifest.xml
文件中执行相同的任务,当您按照以下方式声明您的活动时
<activity
android:name=".SplashActivity"
android:noHistory="true" >
UserLoginTask loginTask = new UserLoginTask(SplashActivity.this);
loginTask.execute();
然后在活动中调用AsyncTask
,如下所示
<activity
android:name=".SplashActivity"
android:noHistory="true" >
UserLoginTask loginTask = new UserLoginTask(SplashActivity.this);
loginTask.execute();
WAY-1
您可以从AndroidManifest.xml文件实现这一点
只需在LoginActivity
中添加android:noHistory=“true”
属性
WAY-2
通过设置flagIntent.flag\u ACTIVITY\u CLEAR\u TOP
从堆栈中删除LoginActivity
Intent intent = new Intent(LoginActivity.this, WelcomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
WAY-1
您可以从AndroidManifest.xml文件实现这一点
只需在LoginActivity
中添加android:noHistory=“true”
属性
WAY-2
通过设置flagIntent.flag\u ACTIVITY\u CLEAR\u TOP
从堆栈中删除LoginActivity
Intent intent = new Intent(LoginActivity.this, WelcomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
你应该使用一个透明的活动作为你的应用程序的启动活动,我们称之为简介 在OnResume()方法中,您可以根据注册状态决定要启动的活动 请记住在您的介绍活动和您决定启动的活动上设置android:noHistory=“true”。这样,启动的活动就不会存储在活动堆栈上,您可以通过按
back
直接退出应用程序
您的清单文件应如下所示:
<activity
android:name="com.example.Intro"
android:label="@string/app_name"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.AuthActivity"
android:label="@string/title_activity_auth"
android:noHistory="true" >
</activity>
<activity
android:name="com.example.WorkingActivity"
android:label="@string/title_activity_working"
android:noHistory="true" >
</activity>
你应该使用一个透明的活动作为你的应用程序的启动活动,我们称之为简介 在OnResume()方法中,您可以根据注册状态决定要启动的活动 请记住在您的介绍活动和您决定启动的活动上设置android:noHistory=“true”。这样,启动的活动就不会存储在活动堆栈上,您可以通过按
back
直接退出应用程序
您的清单文件应如下所示:
<activity
android:name="com.example.Intro"
android:label="@string/app_name"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.AuthActivity"
android:label="@string/title_activity_auth"
android:noHistory="true" >
</activity>
<activity
android:name="com.example.WorkingActivity"
android:label="@string/title_activity_working"
android:noHistory="true" >
</activity>
你能发布一些代码吗?你能发布一些代码吗?两个选项都失败了吗?两个选项都失败了吗?