被修改:
我正在开发一个应用程序,我在其中使用SharedPreference维护会话,因此当用户点击Logout Button时,它只会离开应用程序。但问题是当用户关闭手机并再次打开手机时,对于他们来说再次显示登录屏幕。我不知道该怎么做。请帮忙。下面是我的mainActivity代码:
public class main extends AppCompatActivity {
public Button submit;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String email = "emailkey";
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
submit = (Button) findViewById(R.id.btn_login);
ImageView i1 = (ImageView) findViewById(R.id.imgLogo);
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb);
String checkBoxText = "I agree to all the ";
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
checkBox.setText(Html.fromHtml(checkBoxText));
checkBox.setMovementMethod(LinkMovementMethod.getInstance());
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText e1 = (EditText) findViewById(R.id.input_email);
final EditText p1 = (EditText) findViewById(R.id.input_password);
final String e = e1.getText().toString();
final String password = p1.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(email, e);
editor.commit();
和第二项活动的代码:
else if(position==3)
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("Are you sure you want to Logout?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.clear();
editor.commit();
Intent i = new Intent(getApplicationContext(), main.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// Add new Flag to start new Activity
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Staring Login Activity
getApplicationContext().startActivity(i);
finish();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
在Splash Screen Activity中,我正在检查这个条件,但是当手机关闭时,它现在显示登录屏幕,甚至连闪屏都没有。
public class Splash_Screen extends FragmentActivity{
private static int SPLASH_TIME_OUT = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.splash_screen);
SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);
if (sharedpreferences.contains("email")) {
Intent i = new Intent(Splash_Screen.this, MainActivity.class);
startActivity(i);
}
else{
Intent i = new Intent(Splash_Screen.this,Splash_Screen.class);
startActivity(i);
//get yourkey value and load screen
}
new Handler().postDelayed(new Runnable() {
/*
* Showing splash screen with a timer. This will be useful when you
* want to show case your app logo / company
*/
@Override
public void run() {
// This method will be executed once the timer is over
// Start your app main activity
Intent i = new Intent(Splash_Screen.this, main.class);
startActivity(i);
// close this activity
finish();
}
}, SPLASH_TIME_OUT);
}
}
答案 0 :(得分:0)
在启动画面或启动器屏幕中检查共享pref是否存在。
if (sharedpreferences.contains("yourkey")) {
//get yourkey value and load screen
}
借助此执行操作显示主屏幕或登录页面。
public class Splash_Screen extends FragmentActivity{
private static int SPLASH_TIME_OUT = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.splash_screen);
SharedPreferences sharedpreferences = getSharedPreferences(main.MyPREFERENCES, Context.MODE_PRIVATE);
//change here
if (sharedpreferences.contains(main.email)) {
Intent i = new Intent(Splash_Screen.this, MainActivity.class);
startActivity(i);
}
else{
从其他地方删除此代码
// Intent i = new Intent(Splash_Screen.this,Splash_Screen.class);
// startActivity(i);
//get yourkey value and load screen
}
new Handler().postDelayed(new Runnable() {
/*
* Showing splash screen with a timer. This will be useful when you
* want to show case your app logo / company
*/
@Override
public void run() {
// This method will be executed once the timer is over
// Start your app main activity
Intent i = new Intent(Splash_Screen.this, main.class);
startActivity(i);
答案 1 :(得分:0)
登录oncreate()
SharedPreferences prefs;
String settingsTAG = "AppNameSettings";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity1);
prefs = getSharedPreferences(settingsTAG, 0);
if(checkLoginStatus()){
callIntent();
}
submit = (Button) findViewById(R.id.btn_login);
ImageView i1 = (ImageView) findViewById(R.id.imgLogo);
final ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb);
String checkBoxText = "I agree to all the ";
final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
checkBox.setText(Html.fromHtml(checkBoxText));
checkBox.setMovementMethod(LinkMovementMethod.getInstance());
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final EditText e1 = (EditText) findViewById(R.id.input_email);
final EditText p1 = (EditText) findViewById(R.id.input_password);
final String e = e1.getText().toString();
final String password = p1.getText().toString();
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("rb0", true);
editor.commit();
}
}
private boolean checkLoginStatus(){
boolean rb0 = prefs.getBoolean("rb0", false);
return rb0;
}
答案 2 :(得分:0)
在使用之前尝试清除编辑器。
Editor editor = preferences.edit();
editor.clear();
editor.putString(email, e);
editor.commit();
检查一下:https://looksok.wordpress.com/2012/09/21/sharedpreferences-not-saved-after-app-restart/