2012-03-21 1 views
0

Hurro!
Я пробую себя в написании своего первого приложения для Android, и я ударил по кирпичной стене.SharedPreferences и TimePickerDialog

Я хочу разрешить пользователю устанавливать «старт» и «остановку» для ежедневного расписания. Я успешно реализовал TimePickerDialog и TextView рядом с ним, но я не могу для LIFE меня выяснить, как сохранить выбранное пользователем время в строку 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, но это не сработает, потому что мне нужно сохранить время как длинное, а не строковое.
Я нахожусь в конце моей веревки, и я очень благодарен за помощь!

ответ

1

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

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

Это не просто установило '' starttime ''на текущее время? Я попробую его тем не менее. Спасибо! – TrippySquidsman

+0

Это пример кода для поместите большие данные в предпочтение, вы можете изменить это по-своему. – Dharmendra

+0

И cal.getTimeInMillis() вернет дату, которую вы установили во время диалога piker. – Dharmendra

2

следующим способом

// 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, ""); 
+0

Спасибо за быстрый ответ! Всего несколько вещей; Я только что скопировал и вставил этот код. Правильно ли я это делаю?Кажется, что я получаю синтаксическую ошибку на 'prefEditor.putString (« DateToDisplay », новая строка StringBuilder()' »и весь код ниже этого. Является ли' prefEditor' пользовательским действием или его необходимо импортировать Я не могу найти его в репозитории android.content. Еще раз спасибо! – TrippySquidsman

0

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

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);

+0

Хорошо, так просто для cla rify, 'longKey' - это запись SharedPreferences, а' longValue' - это время (в формате hh: mm), которое мне нужно сохранить? – TrippySquidsman

0

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

  1. частные SharedPreferences myPrefs; myPrefs = this.getSharedPreferences ("filename", MODE_WORLD_WRITEABLE); SharedPreferences.Editor prefsEditor = myPrefs.edit(); prefsEditor.putString ("Mobile_no", getText_no.getText(). ToString(). Trim()); prefsEditor.commit(); `

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

  1. myPrefs = this.getSharedPreferences ("myPrefs", MODE_WORLD_READABLE); Строка X = myPrefs.getString ("Mobile_no", "");

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