2017-11-27 8 views
0

私は最初のネットワーキングアプリケーションを開発していますが、解決策を見つけることができない小さな問題があります。SharedPreferencesとの論理エラー、およびバンドルを渡す

私の主な活動であるスタート画面には、ログインするオプションがあります。あなたがログインしている場合、私のログインクラスはインテントごとのデータをメインアクティビティに渡しますので、UIを更新できます。これは私の主な活動です:

// Just to make sure Loginstatus is false on first run 
    loginstatus = false; 
    //Get saved data from SharedPreferences 
    loginstatus = PreferenceData.getUserLoggedInStatus(this); 
    Log.d("Loginstatus",""+loginstatus); 

    if (extras != null) { 

      login = extras.getString("loginy"); 
      idt = extras.getString("id"); 
      name = extras.getString("name"); 
      vorname = extras.getString("vorname"); 
      email = extras.getString("login"); 
      zsm = vorname + " " + name; 

    } 

    else { 

     // Take saved Data instead the Bundle Data form first Login 
     idt = PreferenceData.getUSERID(this); 
     name = PreferenceData.getNachname(this); 
     vorname = PreferenceData.getVorname(this); 
     email = PreferenceData.getLoggedInEmailUser(this); 

    } 

もちろん、余分なスタートアップ時にNULLです。ログインが成功した場合、私のログインクラスはデータを渡し、私のメインアクティビティは再び呼び出されるので、エクストラはNULLではなく、その情報でUIを更新することができます。また、ログインが真であればSharedPreferncesにデータを保存します。

問題は、私のアプリケーションを完了するとログイン状態を保存したいのです。だから私は私のアプリケーションを再開し、私は私のSharedPreferncesデータを使用したいと思うが、何とかエクストラはまだNULLではないと私はそれを修正する方法を見つけることができません。

答えて

0

これは私がログインを処理する方法です。これが有益なことを願っています。

ログイン・アクティビティー

デフォルト値がfalseに設定されたログイン状態を確認するために、1つの共有設定値を保管してください。 loginCheck()チェック方法内部

@Override 
    protected void onResume() { 
     super.onResume(); 
     if (sharedpreferences.getBoolean("firstRun", true)) { 
      initializeDatabase(); 
      sharedpreferences.edit().putBoolean("firstRun", false).apply(); 
      sharedpreferences.edit().putBoolean("attendance", false).apply(); 
      sharedpreferences.edit().putBoolean("loginStatus", false).apply(); 
     } 
     loginCheck(); 
    } 

ログイン状況に基づいて、メニューの活動にリダイレクトします。ユーザーの場合は

public void loginCheck(){ 
     if(sharedpreferences.getBoolean("loginStatus", true)){ 
      Intent i = new Intent(this, MainMenuActivity.class); 
      startActivity(i); 
      this.finish(); 
     } 
    } 

リダイレクトが発生します説明上記のように、ユーザーの認証が正常にtrueに共有好みや変更、ログイン状態への共有プリファレンス値に必要なデータを追加した後、以前にログインしていない持っています。

if (message.equals("Login successful")) { 
         String employeeId = responseBody.getString("employee_id"); 
         int userId = responseBody.getInt("user_id"); 
         String employeeName = responseBody.getString("employee_name"); 

         SharedPreferencesReference.get().edit().putString("employee_id", employeeId).apply(); 
         SharedPreferencesReference.get().edit().putInt("user_id", userId).apply(); 
         SharedPreferencesReference.get().edit().putString("employee_name", employeeName).apply(); 
         SharedPreferencesReference.get().edit().putBoolean("loginStatus", true).apply(); 

         Toasty.success(ActivityWeakReference.get(), message, Toast.LENGTH_SHORT, true).show(); 
         Intent i = new Intent(ActivityWeakReference.get(), MainMenuActivity.class); 
         ActivityWeakReference.get().startActivity(i); 
         ActivityWeakReference.get().finish(); 

        } 

メニューアクティビティ

は、メニューのアクティビティでは、ユーザーが共有好みログインステータス値を変更することで、ログアウトすることを可能にログアウトボタンを持っている必要があります。私の場合はメニュー項目として持っていました。

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.logout: 
       sharedpreferences.edit().putBoolean("loginStatus", false).apply(); 
       Intent intent = new Intent(this,MainActivity.class); 
       startActivity(intent); 
       break; 
     } 
     return true; 
    } 
関連する問題