当前位置: 代码迷 >> Android >> SharedPreferences值始终返回true吗?
  详细解决方案

SharedPreferences值始终返回true吗?

热度:78   发布时间:2023-08-04 10:01:26.0

我有一个活动,正在尝试实现一种自动登录。 在我的登录活动中,我有以下内容:

sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE);
User.setUid(sharedPref.getInt("UID", 1));
Boolean al = sharedPref.getBoolean("AUTOLOGIN", false);

...

if (al) {
    Log.i("AUTOLOGIN", "Go!");
    Gui.createAlert(context, context.getString(R.string.loading));
    Intent i = new Intent(context, CityActivity.class);
    context.startActivity(i);
}
...
loginBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       ...
       Ajax.AjaxListener callback = new Ajax.AjaxListener() {
          int uid = Integer.parseInt(userInfo.optString("user_id", "1"));
          String sid = user.optString("sid", "");
          String k = json.optString("k", "");
          Boolean al = autoLogin.isChecked();

          SharedPreferences.Editor e = sharedPref.edit();
          e.putInt("UID", uid).putBoolean("AUTOLOGIN", al).putString("SID", sid).apply();

          Gui.createAlert(context, context.getString(R.string.loading));
          Intent i = new Intent(context, CityActivity.class);
      };
});

我只能在模拟器上进行测试,而且似乎无法让SharedPreferences文件内容显示在Android设备监视器中,但是每次应用加载时,它都会执行自动登录例程。 即使当我完全关闭模拟器并重新启动所有功能时,自动登录标志似乎仍然存在。 我对Java / Android编程还很陌生,但是来自PHP和JavaScript背景,并不难。 我只是对为什么AUTOLOGIN SharedPreference键在被选中时总是看起来返回true AUTOLOGIN 有没有使用SharedPreferences实现自动登录的示例?

我应该注意,我最初尝试使用数据库,但是由于使用困难以及目前所需的数据最少而放弃了这个想法。

试试这个希望对您有帮助的希望。 MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void login(View v){

        SharedPreferences spf=getSharedPreferences("myprfs",Context.MODE_PRIVATE);
        String name=spf.getString("uname", "no value");

        String pass=spf.getString("pass", "no value");      

        EditText et1=(EditText)findViewById(R.id.editText1);
        EditText et2=(EditText)findViewById(R.id.editText2);


        if(et1.getText().toString().equalsIgnoreCase(name) && et2.getText().toString().equalsIgnoreCase(pass))
        {

            Intent i=new Intent();
            i.setComponent(new ComponentName(getApplicationContext(), WelcomeActivity.class));
            startActivity(i);

        }



    }

    public void register(View v){

        Intent i=new Intent();
        i.setComponent(new ComponentName(getApplicationContext(), RegistrationActivity.class));
        startActivity(i);



    }

}

RegistrationActivity.java

public class RegistrationActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.register);

    }


    public void register(View v){

        EditText et1=(EditText)findViewById(R.id.editText1);
        EditText et2=(EditText)findViewById(R.id.editText2);
        EditText et3=(EditText)findViewById(R.id.editText3);


        SharedPreferences spf=getSharedPreferences("myprfs", Context.MODE_PRIVATE);

        SharedPreferences.Editor spe=spf.edit();

        spe.putString("uname", et1.getText().toString());
        spe.putString("pass", et2.getText().toString());
        spe.putString("dob", et3.getText().toString());

        spe.commit();

        finish();   

    }
}
  相关解决方案