2017-02-10 5 views
0

私は一種の自動ログインを実装しようとしています。私のログインアクティビティで、私はこれ持っている:私はエミュレータ上でこれをテストすることができました、と私は、Androidデバイスモニタに表示するSharedPreferencesファイルの内容を取得するように見えるが、すべてのことができない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); 
     }; 
}); 

アプリが読み込まれる時間、それは自動ログインルーチンを実行します。エミュレータを完全にシャットダウンしてすべてを再起動しても、自動ログインフラグは保持されているようです。私はJava/Androidプログラミングにはまだまだ慣れていませんが、PHPとJavaScriptのバックグラウンドから来ています。私はなぜ、AUTOLOGINSharedPreferenceキーがチェックされたときに常に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(); 

    } 
} 
関連する問題