阅读您的问题,我感觉您仍然不了解数据持久性和数据库等概念,如果我错了,请纠正我,您可能需要阅读一些关于默认数据库 SQLite 数据库的信息用于安卓设备!请阅读 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 Helper 类:
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 对象并在数据库上调用插入函数一样简单。
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;
}
为了获得所有项目的列表,我们使用游标查询数据库并创建函数返回的待办事项列表。
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 函数,然后当活动再次启动时调用 getAllItems() 函数使用 DBHelper 类获取可以显示给用户的所有待办事项的列表!像这样-
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