[英]Java/Android Shared Preferences - Not directing to correct activity
When my application launches for the first time, I want to direct the user to a configuration type of string. 当我的应用程序第一次启动时,我想将用户定向到字符串的配置类型。 I am using shared preferences to do so. 我正在使用共享的首选项。 When the user first runs the application, the shared preferences file should be empty. 用户首次运行应用程序时,共享首选项文件应为空。 It first checks to see if there is a boolean value associated with the key "configured". 它首先检查是否有与键“ configured”关联的布尔值。 If not, it should redirect to the activity called preferences. 如果没有,它应该重定向到称为首选项的活动。 However, it seems to simply 'skip' over this; 但是,这似乎只是“跳过”了这一点。 instead directing to either the lunch or breakfast activity. 而是直接进行午餐或早餐活动。 I have even tried clearing the shared preferences to no avail. 我什至尝试清除共享的首选项无济于事。 Any idea what the issue could be? 知道可能是什么问题吗?
launch_activity launch_activity
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class launch_activity extends AppCompatActivity {
// private PendingIntent pending;
/*public void startAlarm() {
AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
GregorianCalendar greg = new GregorianCalendar();
Calendar now = Calendar.getInstance();
greg.set(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH), 10, 30);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, greg.getTimeInMillis(), 1000 * 60 * 60 * 24, pending);
}*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launch_activity);
// set alarm
// Intent alarmIntent = new Intent(this, alarmReceiver.class);
// pending = PendingIntent.getBroadcast(launch_activity.this, 0, alarmIntent, 0);
// startAlarm();
}
protected void onStart() {
super.onStart();
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if((preferences.getBoolean("configured", false)) == false) { // app has not yet been set-up
Intent intent = new Intent(this, midamcorp.com.burgerkingapp.preferences.class);
intent.putExtra("setUp", true);
startActivity(intent);
}
Calendar cal = Calendar.getInstance();
if(cal.get(Calendar.HOUR_OF_DAY) > 4 && (cal.get(Calendar.HOUR_OF_DAY) <= 10 && cal.get(Calendar.MINUTE) < 28))
{
Intent intent = new Intent(this, breakfastHome.class);
startActivity(intent);
} else {
Intent intent = new Intent(this, lunchHome.class);
startActivity(intent);
}
}
protected void onResume() {
super.onResume();
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
if(!(preferences.getBoolean("configured", false))) { // app has not yet been set-up
Intent intent = new Intent(this, midamcorp.com.burgerkingapp.preferences.class);
intent.putExtra("setUp", true);
startActivity(intent);
}
Calendar cal = Calendar.getInstance();
if(cal.get(Calendar.HOUR_OF_DAY) > 4 && (cal.get(Calendar.HOUR_OF_DAY) <= 10 && cal.get(Calendar.MINUTE) < 28))
{
Intent intent = new Intent(this, breakfastHome.class);
startActivity(intent);
} else {
Intent intent = new Intent(this, lunchHome.class);
startActivity(intent);
}
}
}
preferences activity 偏好活动
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.media.Ringtone;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.support.v7.app.ActionBar;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.preference.RingtonePreference;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.MenuItem;
import android.support.v4.app.NavUtils;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.Toast;
import java.util.List;
public class preferences extends AppCompatActivity {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.configure_icon:
Intent i = new Intent(this, preferences.class);
startActivity(i);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private View.OnClickListener preferencesListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent;
switch (v.getId()) {
case R.id.back_button:
intent = new Intent(getBaseContext(), launch_activity.class);
startActivity(intent);
break;
case R.id.logoutButton:
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("loggedIn", false);
editor.commit();
intent = new Intent(preferences.this, launch_activity.class);
startActivity(intent);
break;
/* case R.id.changeButton:
intent = new Intent(preferences.this, login.class);
startActivity(intent);
break; */
}
}
;
};
@Override
public void onCreate(Bundle savedInstanceState) {
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
Button back = (Button) findViewById(R.id.back_button);
// Button change = (Button)findViewById(R.id.changeButton);
Button logout = (Button) findViewById(R.id.logoutButton);
back.setOnClickListener(preferencesListener);
// change.setOnClickListener(preferencesListener);
logout.setOnClickListener(preferencesListener);
}
public void onStart() {
super.onStart();
Intent i = getIntent();
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
if (i.getBooleanExtra("setUp", false)) { // if app is starting for the first time set
editor.putBoolean("configured", true);
editor.commit();
} else {
if (!(preferences.getBoolean("loggedIn", false))) { // user is not logged in, redirect
Intent intent = new Intent(this, login.class);
startActivity(intent);
}
}
}
public void onRadioButtonClicked(View view) {
SharedPreferences preferences = getSharedPreferences("config", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
boolean isChecked = ((RadioButton) view).isChecked();
switch (view.getId()) {
case R.id.radio_boards:
if (isChecked) {
editor.putInt("Location", 2);
editor.commit();
}
break;
case R.id.radio_speciality:
if (isChecked) {
editor.putInt("Location", 3);
editor.commit();
}
}
}
}
Thanks so much! 非常感谢!
It seems you're starting 2 activities at the onStart. 看来您正在onStart上开始2个活动。
Just add a "return" on your first if, like this: 只需在您的第一个条件上添加“ return”,例如:
if((preferences.getBoolean("configured", false)) == false) { // app has not yet been set-up
Intent intent = new Intent(this, midamcorp.com.burgerkingapp.preferences.class);
intent.putExtra("setUp", true);
startActivity(intent);
return; //HERE----------------------------------
}
Calendar cal = Calendar.getInstance();
if(cal.get(Calendar.HOUR_OF_DAY) > 4 && (cal.get(Calendar.HOUR_OF_DAY) <= 10 && cal.get(Calendar.MINUTE) < 28))
{
Intent intent = new Intent(this, breakfastHome.class);
startActivity(intent);
} else {
Intent intent = new Intent(this, lunchHome.class);
startActivity(intent);
}
You are always running this code: 您始终在运行以下代码:
Calendar cal = Calendar.getInstance();
if(cal.get(Calendar.HOUR_OF_DAY) > 4 && (cal.get(Calendar.HOUR_OF_DAY) <= 10 && cal.get(Calendar.MINUTE) < 28))
{
Intent intent = new Intent(this, breakfastHome.class);
startActivity(intent);
} else {
Intent intent = new Intent(this, lunchHome.class);
startActivity(intent);
}
Try adding an else clause, something like this: 尝试添加else子句,如下所示:
if((preferences.getBoolean("configured", false)) == false) { // app has not yet been set-up
Intent intent = new Intent(this, midamcorp.com.burgerkingapp.preferences.class);
intent.putExtra("setUp", true);
startActivity(intent);
}
else {
Calendar cal = Calendar.getInstance();
if(cal.get(Calendar.HOUR_OF_DAY) > 4 && (cal.get(Calendar.HOUR_OF_DAY) <= 10 && cal.get(Calendar.MINUTE) < 28))
{
Intent intent = new Intent(this, breakfastHome.class);
startActivity(intent);
} else {
Intent intent = new Intent(this, lunchHome.class);
startActivity(intent);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.