承接上一篇闹钟文章,现在要实现闹钟数据的存储和读取,借助sharedpreference。
代码如下:
public class Alarm extends LinearLayout { private Button button; private ListView listView; ArrayAdapter<Alarm.myalarm> adapter; private SharedPreferences sp; private static final String ALARM="myalarm"; public Alarm(Context context) { super(context); } public Alarm(Context context, AttributeSet attrs) { super(context, attrs); } public Alarm(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { super.onFinishInflate(); button=(Button)findViewById(R.id.btn1); listView=(ListView)findViewById(R.id.list1); adapter=new ArrayAdapter<Alarm.myalarm>(getContext(),android.R.layout.simple_list_item_1); listView.setAdapter(adapter); sp=getContext().getSharedPreferences("alarm",Context.MODE_PRIVATE); readAlarm(); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { addAlarm(); } }); } public void addAlarm(){ Calendar calendar=Calendar.getInstance(); new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int hour, int minute) { Calendar c=Calendar.getInstance(); c.set(Calendar.HOUR,hour); c.set(Calendar.MINUTE,minute); Calendar currenttime=Calendar.getInstance(); if (c.getTimeInMillis()>currenttime.getTimeInMillis()){ c.setTimeInMillis(c.getTimeInMillis()+24*60*60*1000); } adapter.add(new myalarm(c.getTimeInMillis())); saveAlarm(); } },calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),true).show(); } public void saveAlarm(){ SharedPreferences.Editor editor=sp.edit(); StringBuffer sb=new StringBuffer(); for (int i=0;i<adapter.getCount();i++){ sb.append(adapter.getItem(i).getTime()).append(","); } if (sb.length()>1){ editor.putString(ALARM,sb.toString().substring(0,sb.length()-1)); }else { editor.putString(ALARM,null); } editor.commit(); } private void readAlarm(){ String content=sp.getString(ALARM,null); if (content!=null){ String[] timeString=content.split(","); for (String string:timeString){ adapter.add(new myalarm(Long.parseLong(string))); } } } class myalarm{ private Calendar date; private long time=0; private String timeLabel=""; public myalarm(long time){ this.time=time; date=Calendar.getInstance(); date.setTimeInMillis(time); timeLabel=String.format("%dM%dD%d:%d",date.get(Calendar.YEAR),date.get(Calendar.MONTH),date.get(Calendar.HOUR),date.get(Calendar.MINUTE)); } public long getTime() { return time; } public String getTimeLabe() { return timeLabel; } @Override public String toString() { return timeLabel; } } }savealarm和readalarm方法分别实现了存储和读取