检查是否存在保存首选项

时间:2016-03-01 02:47:46

标签: android android-intent sharedpreferences

我希望在用户首次登录时将用户发送到我的Main Activicty。在这里,他们输入一个名称,我保存到Intent并单击按钮转到第二个活动。然后我在第二页显示Intent名称。

每次用户登录后,我都希望将它们直接发送到第二个活动。

我尝试通过向用户发送第二个活动来尝试读取名为loggedInOnceAlready的变量,以查看它是否存在于SharedPreferences中以及是否设置为true。如果它不存在,则创建它并将其设置为false,然后提出意图以将用户带到主活动。如果它存在且设置为false,则不执行任何操作并继续我的第二个活动。

在我的第二个Activity中首次登录完成后,将其设置为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);
        }
    });

}

1 个答案:

答案 0 :(得分: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 ...
    }