2017-02-10 126 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(); 

    } 
}