【发布时间】: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