【问题标题】:How to create a new SharedPreferences if the key is taken?如果获取密钥,如何创建新的 SharedPreferences?
【发布时间】:2016-07-31 05:18:56
【问题描述】:

我有一个用于存储日历事件/日期信息的代码。我希望能够调用多个日期/事件,但到目前为止我只能存储一个或它会覆盖。 Stored____ 是我从 CalendarView 中获得的每一天、一个月、一年等的名称。 onSelectedDayChange 检查是否存在与手机上选择的日期相符的日期,并将所有信息输出到 Snackbar 中。我的代码如下:

    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();
            }

        }
    });

有人可以帮我解释一下我如何能够存储多个事件,以便在单击日期时,所有事件都能够显示并且不会相互覆盖吗? 谢谢!

【问题讨论】:

    标签: java android arrays android-studio sharedpreferences


    【解决方案1】:

    如果你想存储多个事件,你不应该使用SharedPreferences。相反,您应该创建一个 SQLite 数据库来存储数据。

    创建一个名为Events 的表并添加“名称”、“年”、“月”、“日”、“小时”和“分钟”等列。然后您可以从数据库中获取数据并将数据保存到数据库中。

    如果您了解 SQL,则此方法将非常容易实现。但如果你是像我一样对 SQL 知之甚少的人,我建议你使用 ORM 库来帮助你处理数据库。

    IMO,SugarORM 是一个非常用户友好的 ORM 库。只需创建一个扩展 SugarRecord<Event> 的名为 Event 的类,您就可以轻松获取数据并保存数据,无需任何 SQL!

    如果你很懒,这里是课程:

    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;
        }
    }
    

    您可以通过以下方式获取您保存的所有事件:

    Event.listAll(Event.class);
    

    您可以通过调用来保存事件:

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

    超级简单!

    【讨论】:

    • 在我给您的链接中,它包含您需要了解的有关 SugarORM 的所有详细信息。请参阅“查询生成器”部分。 @是的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    相关资源
    最近更新 更多