2017-02-10 182 views
0

我有一个活动,我试图实现一种自动登录。在我登录活动,我有这样的:SharedPreferences值总是返回true?

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设备监视器显示,但每应用程序加载的时间,它执行自动登录例程。即使我完全关闭了仿真器并重新启动了一切,autologin标志似乎仍然存在。我对Java/Android编程相当陌生,但来自PHP和JavaScript背景,并不难找到答案。我只是难以理解,为什么在检查时总会出现true键。有没有与SharedPreferences实施自动登录的例子?

我应该注意到我最初尝试使用数据库,但由于使用困难和现在需要的最少数据而废弃了这个想法。

+2

提交sharedpref。 –

+1

你需要卸载或清除应用程序的数据,然后只有你的喜好清除 –

+1

如果你有一些注销的概念在你的应用程序中使用'SharedPreferences.Editor editor = sharedPreferences.edit(); editor.clear();'通过这个SharedPreferences的内容将被删除,您的自动登录将被停止。 – SachinSarawgi

回答

-2

试试这个希望这会帮助你。 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(); 

    } 
}