2012-03-21 32 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進行了實驗,但這不起作用,因爲我需要將時間存儲爲long而不是String。
我在我的繩索末端,我真的很感謝一些幫助!

回答

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 2012-03-21 05:22:44

+0

這是一個示例代碼把一個很長的數據放在首選項中,你可以用你自己的方式修改它 – Dharmendra 2012-03-21 05:48:54

+0

然後cal.getTimeInMillis()會返回你在piker對話框中設置的日期 – Dharmendra 2012-03-21 05:50:04

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 2012-03-21 04:59:20

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 2012-03-21 05:12:14

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); String X = myPrefs.getString(「Mobile_no」,「」);

X ==獲取信息