简体   繁体   English

Java / Android共享首选项-不定向正确的活动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM