2016-04-10 39 views
0

Takvim etkinliği/tarih bilgilerini depolamak için kullanıyorum bir kod var. Birden çok tarih/etkinlik için arama yapabilmek istiyorum ancak şu ana kadar yalnızca bir tane depolayabilirim veya üzerine yazabilirim. Stored____, her gün, ayın, yılın adıdır, vb. CalendarView'umdan alırım. OnSelectedDayChange, telefonda seçilen tarihe uygun bir tarih varsa ve tüm bilgileri bir Snackbar'da çektiğini kontrol eder.Anahtar alındığında yeni bir SharedPreferences nasıl oluşturulur?

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor editor = sharedPref.edit(); 
    editor.putString("savedevent",EventView.getText().toString()); 
    editor.putInt("savedyear", storedyear); 
    editor.putInt("savedmonth", storedmonth); 
    editor.putInt("savedday", storedday); 
    editor.putInt("savedhour", storedhour); 
    editor.putInt("savedminute", storedminute); 
    editor.commit(); 
    editor.apply(); 
    finish(); 

final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    CalendarView calendarView=(CalendarView) findViewById(R.id.calendar); 
    calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() { 

     @Override 
     public void onSelectedDayChange(CalendarView view, int year, int month, 
             int dayOfMonth) { 
      if (year == prefs.getInt("savedyear",0) && month == prefs.getInt("savedmonth",0) && dayOfMonth == prefs.getInt("savedday",0)){ 
       Snackbar snackbar = Snackbar.make(findViewById(R.id.LinearLayout), "Event: " + prefs.getString("savedevent",null) + " Date: " + (prefs.getInt("savedmonth", 0) + 1) + "/" + prefs.getInt("savedday", 0) + "/" + prefs.getInt("savedyear", 0) + " Time: " + prefs.getInt("savedhour", 0) + ":" + prefs.getInt("savedminute", 0), Snackbar.LENGTH_LONG); 
       snackbar.show(); 
      } 

     } 
    }); 

birisi bir tarih tıklandığında ben hepsini görüntülemek mümkün olacaktır, bu nedenle birden fazla etkinlik saklamak mümkün olacaktır nasıl bana açıklayabilir yardımcı olabilir ve şu şekildedir: Benim kodudur birbirlerinin üzerine yazmazlar mı? Teşekkürler!

cevap

1

Birden çok olay kaydetmek istiyorsanız, SharedPreferences'u kullanmamalısınız. Bunun yerine, verileri depolamak için bir SQLite veritabanı oluşturmanız gerekir.

Events adlı bir tablo oluşturun ve "Name", "Year", "Month", "Day", "Hour" ve "Minute" gibi sütunları ekleyin. Ardından veriyi veriden alabilir ve veritabanına kaydedebilirsiniz.

SQL'i biliyorsanız, bu yöntemi uygulamanız çok kolay olacaktır. Ama eğer benim gibi küçük SQL bilen birisi iseniz, veri tabanında size yardımcı olacak bir ORM kütüphanesi kullanmanızı tavsiye ederim.

IMO, SugarORM çok kullanıcı dostu bir ORM kütüphanesidir. Yalnızca SugarRecord<Event>'u genişleten Event adında bir sınıf oluşturun ve herhangi bir SQL olmadan verileri kolayca alabilir ve verileri kaydedebilirsiniz! arayarak Bir etkinlik kaydedebilirsiniz

Event.listAll(Event.class); 

:

public class Event extends SugarRecord<Event> { 
    public String name; 
    public int year; 
    public int month; 
    public int day; 
    public int hour; 
    public int minute; 

    public Event() { } 
    public Event(String name, int year, int month, int day, int hour, int minute) { 
     this.name = name; 
     this.year = year; 
     this.month = month; 
     this.day = day; 
     this.hour = hour; 
     this.minute = minute; 
    } 
} 

Sen tarafından kaydedilen tüm olayları alabilirsiniz:

Event e = new Event("Some Stuff", 2016, 4, 10, 11, 8); 
e.save(); 
tembel değilseniz

, burada sınıf var

Süper Kolay!

+0

Size verdiğim bağlantıda, SugarORM hakkında bilmeniz gereken tüm detaylara sahiptir. "Sorgu Oluşturucusu" bölümüne bakın. @Evet – Sweeper

İlgili konular