SharedPreferences и TimePickerDialog - PullRequest
0 голосов
/ 21 марта 2012

Hurro!
Я пытаюсь написать свое первое приложение для Android и попал в кирпичную стену.

Я хочу, чтобы пользователь установил «начало» ивремя остановки, для ежедневного графика.Я успешно реализовал TimePickerDialog и TextView рядом с ним, но не могу из-за ЖИЗНИ выяснить, как сохранить выбранное пользователем время в строку SharedPreferences.

Код выглядит следующим образом (удаленодля ясности):

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setup);
        // Retrieve the shared preferences
        mUserSettings = getSharedPreferences(USER_PREFERENCES, MODE_PRIVATE);

        // capture our View elements
        mTimeDisplayStart = (TextView)  findViewById(R.id.TextView_ScheduleStart_Info);
        mPickTimeStart = (Button) findViewById(R.id.Button_ScheduleStart);

        // add a click listener to the button
        mPickTimeStart.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDialog(TIME_DIALOG_START);
            }
        });

        // get the current time
        final Calendar c = Calendar.getInstance();
        mHourStart = c.get(Calendar.HOUR_OF_DAY);
        mMinuteStart = c.get(Calendar.MINUTE);

        // display the current date
        updateDisplayStart();
    }

    // updates the time we display in the TextView
    private void updateDisplayStart() {
        mTimeDisplayStart.setText(
                new StringBuilder()
                .append(padStart(mHourStart)).append(":")
                .append(padStart(mMinuteStart)));
    }

    private static String padStart(int c) {
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);
    }

    // the callback received when the user "sets" the time in the dialog
    private TimePickerDialog.OnTimeSetListener mTimeSetListenerStart =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHourStart = hourOfDay;
                mMinuteStart = minute;
                updateDisplayStart();
            }
        };

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case TIME_DIALOG_START:
            return new TimePickerDialog(this,
                    mTimeSetListenerStart, mHourStart, mMinuteStart, false);
        }
        return null;
    }

Я предполагаю, что время должно быть сохранено одновременно с обновлением TextView ... но я понятия не имею, как это сделать -.-

Я потратил 5 или 6 часов на поиски ответа, но буквально не могу его найти.Я экспериментировал с SharedPreferences.Editor, но это не сработает, потому что мне нужно хранить время как длинное, а не как String.
Я в конце своей веревки, и я очень признателеннекоторая помощь !!

Ответы [ 4 ]

2 голосов
/ 21 марта 2012

в следующем методе

    // updates the time we display in the TextView
         private void updateDisplayStart() {
            mTimeDisplayStart.setText(
                    new StringBuilder()
                    .append(padStart(mHourStart)).append(":")
                    .append(padStart(mMinuteStart)));
        });

     SharedPreferences settingsActivity = getSharedPreferences("todolist1",
                    Activity.MODE_PRIVATE);
            SharedPreferences.Editor prefEditor = settingsActivity.edit();

            prefEditor.putString("DateToDisplay",new StringBuilder()
                    .append(padStart(mHourStart)).append(":")
                    .append(padStart(mMinuteStart));  // updates the time we display in the TextView



        prefEditor.commit();
}

После этого, куда бы вы ни захотели, получить данные из общего предпочтения следующим образом

SharedPreferences settingsActivity = getSharedPreferences("todolist1",
                Activity.MODE_PRIVATE);

        if (settingsActivity.contains(DateToDisplay)) {
            String saveddate = settingsActivity
                    .getString(DateToDisplay, "");
1 голос
/ 21 марта 2012

Вы должны сделать так

private TimePickerDialog.OnTimeSetListener mTimeSetListenerStart =
        new TimePickerDialog.OnTimeSetListener() {
            public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                mHourStart = hourOfDay;
                mMinuteStart = minute;
                updateDisplayStart();

                Calendar cal = Calendar.getInstance();
                cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
                cal.set(Calendar.MINUTE, minute);
                mUserSettings.edit().putLong("starttime", cal.getTimeInMillis()).commit();

            }
        };
0 голосов
/ 21 марта 2012

этот код для редактирования в файле SharedPreference: -

  1. private SharedPreferences myPrefs; myPrefs = this.getSharedPreferences ( "имя файла", MODE_WORLD_WRITEABLE); SharedPreferences.Editor prefsEditor = myPrefs.edit (); prefsEditor.putString ( "Mobile_no", . GetText_no.getText () ToString () отделка ()). prefsEditor.commit (); `

этот код для получения значения файла SharedPreference: -

  1. myPrefs = this.getSharedPreferences ("myPrefs", MODE_WORLD_READABLE); String X = myPrefs.getString ("Mobile_no", "");

X == получить информацию

0 голосов
/ 21 марта 2012

SharedPreferences поддерживает long с. Вы можете сделать что-то вроде

SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE); prefs.edit().putLong("longKey", longValue).commit();

для сохранения значения. Чтобы получить его, вы можете сделать

SharedPreferences prefs = getSharedPreferences("prefs", Context.MODE_PRIVATE); long longValue = prefs.getLong("longKey", 0l);

...