【发布时间】:2019-04-23 01:46:12
【问题描述】:
我对 Android 很陌生,最近遇到了需要使用 SharedPreferences 的情况: 我有一个随着项目的进行而更改的变量,并且应用程序根据变量的值在不同的屏幕中启动,例如,如果值为 0,则应用程序应在 LoginManager.class 中启动,如果为 1,则在MainActivity.class。
因此,每当我成功登录时,状态都会更改为 1(因此我不必每次都登录)或者如果我注销状态为 0。
鉴于此,当然需要将变量保存在外部,以免值丢失,并在我创建第一个屏幕时检索它。
所以我的逻辑是我创建了一个 onDestroy 方法,所以当屏幕关闭时,任何全局变量“state”都是 SharedPreference 变量“sharedstate”将得到的(这是来自我的初始 Activity):
private SharedPreferences sharedPref;
public static int state=0;
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.activity_first);
pb = (ProgressBar) findViewById(R.id.pb);
mContext = IntroManager.this;
pb.setVisibility(ProgressBar.VISIBLE);
CountDownTimer mCountDownTimer;
pb.setProgress(i);
sharedPref = mContext.getSharedPreferences("Apathy", Context.MODE_PRIVATE);
getProfile();
mCountDownTimer=new CountDownTimer(1500,1000) {
@Override
public void onTick(long millisUntilFinished) {
Log.v("Log_tag", "Tick of Progress"+ i+ millisUntilFinished);
i++;
pb.setProgress((int)i*100/(1500/1000));
}
@Override
public void onFinish() {
check();
i++;
pb.setProgress(100);
}
};
mCountDownTimer.start();
}
@Override
protected void onDestroy (){
super.onDestroy();
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("sharedstate", 1);
editor.commit();
}
private void getProfile() {
String sharedstate = sharedPref.getString("state", "");
state= Integer.parseInt(sharedstate);
}
public void check(){
if(state == 0){
Intent mcrIntent = new Intent(IntroManager.this, LoginManager.class);
startActivity(mcrIntent);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
}else{
if(state == 1){
Intent mcrIntent = new Intent(IntroManager.this, MainActivity.class);
startActivity(mcrIntent);
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
}
}
}
所以我陷入了两难境地:如果我在所有屏幕中都使用相同的 onDestroy 方法(因为我无法预测应用程序将在哪里关闭),相同的“共享状态”是否会改变它的值或它创建了一堆称为 Sharedstate 的变量?他们是否被保存在同一个“冷漠”中?
【问题讨论】:
-
为什么要在 onDestroy 中更新它?登录成功和注销成功时不能更新吗?
-
是的,我也注意到了,我要更新项目
标签: java android android-studio