android工作室)

qlzsbp2j  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(413)

我是android开发的初学者。
我一直在尝试建立一个待办事项列表应用程序。
我的应用程序能够接受数据并显示它们((下图)

从现在起,当我重新打开应用程序时,这些添加的项目会被重置,而列表为空。
我需要的帮助是,如何保持这些添加的项目,因为它是当我重新打开应用程序。
我知道如何使用文本视图和编辑文本的SharedReference概念。但只是我不知道如何在recyclerviews中应用它。
希望有人能帮我度过难关。

szqfcxe2

szqfcxe21#

为此,您需要使用某种类型的数据库,当您添加一个项目时,您也会将其保存在所选的数据库中,每当您打开应用程序时,首先检查数据库是否为空,然后显示可用的数据库(如果有)。
打开应用程序时,请检查 SharedPreference 如果列表不是空的,就把它拿出来传给 AdapterRecyclerView 数据库示例:realm、firebase firestore或firebase realtime database、sharedpreference(尽管它最好用于缓存而不是大数据)、room、sqlite。

kyxcudwk

kyxcudwk2#

阅读你的问题,我有一种感觉,你仍然不知道的概念,如数据持久性和数据库,请纠正我,如果我错了,你可能要读一点关于sqlite数据库,这是默认的数据库在android设备中使用!请阅读android文档以更好地了解它:https://developer.android.com/training/data-storage/sqlite
我将给出实现这一目标所需遵循的流程的大致思路:
您可能需要创建数据类,该类将保存该项所需的所有数据。在您的情况下,它将用于保存待办事项。它必须有一个用于唯一标识它的id字段。其他字段包括标题、日期等。我想您可能已经为此应用程序创建了它。像这样:

class TodoItem{
        long id;
        String name;
        long date;

        public TodoItem() {
        }

        public TodoItem(long id, String name, long data) {
            this.id = id;
            this.name = name;
            this.date = data;
        }

        public long getId() {
            return id;
        }

        public void setId(long id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public long getDate() {
            return date;
        }

        public void setDate(long date) {
            this.date = date;
        }
    }

第二步是创建在屏幕上显示数据的视图,您已经为应用程序创建了该视图。
第三步也是最重要的一步是数据持久化,您需要创建一个数据库,在该数据库中必须添加所有数据,然后在需要时检索这些数据。为此,我们将使用sql!
首先,创建一个sql帮助程序类:

public class DBHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "MY_DATABASE";
    public static final String TABLE_NAME = "TODO_TABLE";
    public static final String TODO_COLUMN_ID = "ID";
    public static final String TODO_COLUMN_NAME = "NAME";
    public static final String TODO_COLUMN_DATE = "DATE";
    private HashMap hp;

    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "("
                + TODO_COLUMN_ID + " INTEGER PRIMARY KEY, "
                + TODO_COLUMN_NAME + " TEXT, "
                + TODO_COLUMN_DATE + " LONG);");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

现在在上面的类中添加2个函数,一个用于插入一个项,另一个用于获取所有项(使用光标),如下所示:
插入元素就像创建content values对象并调用数据库上的insert函数一样简单。

public boolean insertItem(String title, long date) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(TODO_COLUMN_NAME, title);
    contentValues.put(TODO_COLUMN_DATE, date);
    db.insert(TABLE_NAME, null, contentValues);
    return true;
}

为了获得所有项的列表,我们使用一个游标来查询数据库,并创建一个由函数返回的todo项的列表。

public ArrayList<TodoItem> getAllItems() {
    ArrayList<TodoItem> items = new ArrayList<>();

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM "  + TABLE_NAME, null);
    res.moveToFirst();
    while (!res.isAfterLast()) {
        TodoItem todoItem  = new TodoItem();
        todoItem.setId(res.getLong(res.getColumnIndex(TODO_COLUMN_ID)));
        todoItem.setName(res.getString(res.getColumnIndex(TODO_COLUMN_NAME)));
        todoItem.setDate(res.getLong(res.getColumnIndex(TODO_COLUMN_DATE)));
        items.add(todoItem);
        res.moveToNext();
    }
    return items;
}

因此,现在在活动中,您只需创建dbhelper类的一个对象,并且每当您要向数据库中插入一个对象时,只需调用insert函数,然后每当活动再次启动时,调用dbhelper类的getallitems()函数,就可以得到可以显示给用户的所有todo项的列表!就像这样-

DBHelper databaseHelper = new DatabaseHelper(this);

databaseHelper.insertItem("buy groceries", System.currentTimeMillis()); // insert an item

ArrayList<TodoItem> items = databaseHelper.getAllItems(); // get a list of all items
sg24os4d

sg24os4d3#

如果只是将添加的项目添加到recyclerview,则不会保存这些项目。您必须将数据保存在数据库中,然后在应用程序启动时从那里检索数据。room是android提供的用于使用sqlite存储数据的android库,room是sqlite数据库的 Package 器。您可以在此处获得有关文件室库的更多信息:
链接

相关问题