2012-09-09 21 views
39

Android'de SharedPreferences numaralı birkaç tarihi kaydetmem ve geri almam gerekiyor. Ben AlarmManager kullanarak hatırlatma uygulaması yapıyorum ve gelecekteki tarihlerin listesini kaydetmem gerekiyor. Milisaniye olarak alınabilmelidir. Öncelikle bugün şimdiki zaman ile gelecek zaman arasındaki zamanı hesaplamayı ve paylaşılan tercihte saklamayı düşündüm. Ama bu yöntem AlarmManager için kullanmam gerektiğinden çalışmıyor.PaylaşılanPreferences'da nasıl kayıt ve geri yükleme yapılır

cevap

131

Doğru tarihi kaydetmek ve yüklemek için, Date nesnesinin long (numara) gösterimini kullanabilirsiniz.

Örnek:

//getting the current time in milliseconds, and creating a Date object from it: 
Date date = new Date(System.currentTimeMillis()); //or simply new Date(); 

//converting it back to a milliseconds representation: 
long millis = date.getTime(); 
Bu

Kaydet gibi SharedPreferences den Date/Time verileri kaydetmek veya almak için kullanabilir

:

SharedPreferences prefs = ...; 
prefs.edit().putLong("time", date.getTime()).apply(); 

Oku geri:

Date myDate = new Date(prefs.getLong("time", 0)); 

Düzenleme

sen Additionaly TimeZone saklamak istiyorsanız, bu amaçla bazı yardımcı yöntem yazabilirsiniz, böyle bir şey (ben onları test etmedim, çekinmeyin bir şey yanlışsa, düzeltin):

public static Date getDate(final SharedPreferences prefs, final String key, final Date defValue) { 
    if (!prefs.contains(key + "_value") || !prefs.contains(key + "_zone")) { 
     return defValue; 
    } 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(prefs.getLong(key + "_value", 0)); 
    calendar.setTimeZone(TimeZone.getTimeZone(prefs.getString(key + "_zone", TimeZone.getDefault().getID()))); 
    return calendar.getTime(); 
} 

public static void putDate(final SharedPreferences prefs, final String key, final Date date, final TimeZone zone) { 
    prefs.edit().putLong(key + "_value", date.getTime()).apply(); 
    prefs.edit().putString(key + "_zone", zone.getID()).apply(); 
} 
+7

Bu çalışır. Doğru olarak işaretlemelisin. – rplankenhorn

+0

Bu şekilde, saat dilimlerine özgü tarihler için geçerli değildir. Kullanım durumu: seyahat eden kullanıcı için tarihleri ​​sakla – Sergii

İlgili konular