2016-03-01 86 views
1

我想給用戶發送到我的主要Activicty他們登錄的第一次。在這裏,他們進入我保存到一個意向,並點擊一個按鈕轉到第二個活動的名稱。然後我在第二頁上顯示意圖名稱。檢查是否保存使用偏好存在

每次用戶登錄後,我都希望直接將它們發送到第二個活動。

我試圖通過發送用戶到第二個活動嘗試讀取名爲loggedInOnceAlready的變量,以查看它是否存在於SharedPreferences中,以及它是否設置爲true。如果它不存在,創建它並將其設置爲false,然後引發將用戶帶到主活動的意圖。如果它存在並設置爲false,則不執行任何操作並繼續執行第二個活動。

第一次登錄完成後,我的第二個活動,將其設置爲true,並將其存儲回我的SharedPreferences。

我覺得這應該工作,但我實現它

有問題這是我的清單首先:

<activity 
     android:name=".SecondActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_second" > 

我的第二個活動:

public class SecondActivity extends AppCompatActivity { 

String name; 
TextView etWelcome; 
String newName; 

SharedPreferences sharedPrefences; 
Boolean loggedInOnceAlready; 

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

    sharedPrefences = PreferenceManager.getDefaultSharedPreferences(this); 
    loadSavedPrefernce(); 

    Intent intent = getIntent(); 
    Bundle bundle = intent.getExtras(); 
    name = bundle.getString("name"); 

    etWelcome = (TextView)findViewById(R.id.tvWelcome); 
    etWelcome.setText("Welcome " + name); 

} 

private void loadSavedPrefernce() { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    if (loggedInOnceAlready = null){ 
     prefs.edit().putBoolean("loggedInOnceAlready", true).commit(); 
    }else { 
     this.loggedInOnceAlready = false; 
     savePreference(loggedInOnceAlready, "loggedInOnceAlready"); 
     Intent intent = new Intent(SecondActivity.this, MainActivity.class); 
     startActivity(intent); 
    } 
} 

private void savePreference(Boolean key, String value) { 
    SharedPreferences.Editor editor = sharedPrefences.edit(); 
    editor.putBoolean("loggedInOnceAlready", false); 
    editor.commit(); 
} 

而我的主要活動:

public class MainActivity extends AppCompatActivity { 

SharedPreferences sharedPrefences; 
Boolean loggedInOnceAlready; 

String name; 
EditText etName; 
Button btnGo; 

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

    final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    btnGo.setOnClickListener(new View.OnClickListener() { 


     @Override 
     public void onClick(View v) { 
      name = etName.getText().toString(); 

      prefs.edit().putBoolean("loggedInOnceAlready", true); 

      // loggedInOnceAlready = true; 

      Intent intent = new Intent(MainActivity.this, SecondActivity.class); 
      intent.putExtra("name", name); 
      startActivity(intent); 
     } 
    }); 

} 
+0

不應該將你在檢查MainActivity SP ..如果真的進入SecondAct或留在MainAct。並且您的默認活動應該是MainAct。 – Dhina

+0

是啊,這應該工作,應該代碼工作,因爲我有一次我周圍改變它呢? – Coco12

+0

應該..只要嘗試,並得到回來,如果你被擊中, – Dhina

回答

0

contains (String key)檢查首選項是否包含首選項。 欲瞭解更多信息: http://developer.android.com/reference/android/content/SharedPreferences.html

例子:

SharedPreferences sharedPrefs = getSharedPreferences("PREF_APP", Context.MODE_PRIVATE); 
    if(!sharedPrefs.contains("loggedInOnceAlready")) { 
     // Doesn't exist so create it 
    } 
    else { 
     // Do Nothing (delete else) or go to MainActivity ... 
    } 
+0

好了,所以要我在第二個活動把這個在我的loadPreferences方法可能? – Coco12

+0

我相信是的..我的回答做了一個小的修改。 –