【问题标题】:Checking if save preferences exist检查是否存在保存首选项
【发布时间】:2016-03-01 02:47:46
【问题描述】:

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

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

我通过将用户发送到第二个活动来尝试读取名为 loggedInOnceAlready 的变量,以查看它是否存在于 SharedPreferences 中以及它是否设置为 true。如果它不存在,则创建它并将其设置为 false,然后引发将用户带到 Main Activity 的意图。如果它存在并设置为 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);
        }
    });

}

【问题讨论】:

  • 您是否应该在 MainActivity 中检查 SP。如果为真,请转到 SecondAct 或留在 MainAct。并且您的默认活动应该是 MainAct。
  • 是的,应该可以,一旦我改变它,代码是否应该像我一样工作?
  • 应该......如果你被击中,试着回来,

标签: android android-intent sharedpreferences


【解决方案1】:

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 ...
    }

【讨论】:

  • 好的,我应该把它放在我的 loadPreferences 方法中,也许放在我的第二个活动中?
  • 我相信是的..在我的回答中做了一个小的修改。
猜你喜欢
  • 2012-02-04
  • 2014-12-01
  • 2016-04-25
  • 2012-07-16
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多