2012-03-21 31 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 ==获取信息