让我来为你详细讲解一下“Android 个人理财工具二:使用SQLite实现启动时初始化数据”的完整攻略。
1. 为什么需要初始化数据?
在开发一个应用时,有时需要一些初始数据,例如:字典数据、分类数据等,又或者需要一些测试数据等。这些数据通常需要在应用启动时预先加载到应用中,以便提高用户使用体验。
2. 使用SQLite实现启动时初始化数据的步骤
以下是使用SQLite实现启动时初始化数据的步骤。
2.1 数据库设计与创建
首先,需要使用数据库软件设计好要使用的数据库表结构,例如:本次我们需要实现一个包含账目类别的数据库,包含以下字段:
- _id:主键
- name:类别名称
- type:类别类型(支出/收入)
在 SQLiteOpenHelper 中实现数据库的创建,创建好应用初始需要的表。
2.2 读取初始数据
在 Java 的资源文件夹(一般为 /res/raw 目录)中,新建一个数据文件,此处为 category_init_data.json,放置初始需要载入数据库中的数据。一般这个数据文件我们都会通过打包在apk中形式存储,可以通过 InputStream 对其进行读取。对其进行解析后协助执行插入数据库操作
示例:
public List<CategoryModel> buildInitCategoryData(Context context) {
List<CategoryModel> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();
try(InputStream is = context.getResources().openRawResource(R.raw.category_init_data)) {
int len;
byte[] buffer = new byte[1024];
while ((len = is.read(buffer)) != -1) {
sb.append(new String(buffer, 0, len));
}
} catch (IOException e) {
e.printStackTrace();
}
// 解析 Json
Gson gson = new Gson();
list = gson.fromJson(sb.toString(), new TypeToken<List<CategoryModel>>() {}.getType());
return list;
}
2.3 执行插入数据库操作
在 SQLiteOpenHelper 中,使用 insert() 方法将初始数据插入数据库中。
示例:
public void insertCategoryData(SQLiteDatabase db, List<CategoryModel> initData) {
ContentValues values = new ContentValues();
for (CategoryModel category : initData) {
values.put(CATEGORY_COLUMN_NAME, category.getName());
values.put(CATEGORY_COLUMN_TYPE, category.getType());
db.insert(TABLE_CATEGORY, null, values);
}
}
2.4 实现启动时初始化数据
将操作封装在辅助类中并在 Application 的 onCreate() 方法中调用初始化方法。
示例:
public class DatabaseHelper extends SQLiteOpenHelper {
// 数据库名称和版本号
private static final String DATABASE_NAME = "finance.db";
private static final int DATABASE_VERSION = 1;
// 账目分类表
private static final String TABLE_CATEGORY = "category";
private static final String CATEGORY_COLUMN_ID = "_id";
private static final String CATEGORY_COLUMN_NAME = "name";
private static final String CATEGORY_COLUMN_TYPE = "type";
// 初始分类数据
private Context mContext;
private static DatabaseHelper mInstance = null;
public synchronized static DatabaseHelper getInstance(Context context) {
if (mInstance == null) {
mInstance = new DatabaseHelper(context.getApplicationContext());
}
return mInstance;
}
private DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
// 创建分类表
String CREATE_CATEGORY_TABLE = "CREATE TABLE " + TABLE_CATEGORY + "("
+ CATEGORY_COLUMN_ID + " INTEGER PRIMARY KEY,"
+ CATEGORY_COLUMN_NAME + " TEXT,"
+ CATEGORY_COLUMN_TYPE + " INTEGER" + ")";
db.execSQL(CREATE_CATEGORY_TABLE);
// 初始化分类数据
insertCategoryData(db, buildInitCategoryData(mContext));
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 增加一个 COLUMN 的操作
db.execSQL("ALTER TABLE " + TABLE_CATEGORY + " ADD COLUMN other TEXT");
}
}
3. 结语
以上就是关于“Android 个人理财工具二:使用SQLite实现启动时初始化数据”的完整攻略,希望能够对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android 个人理财工具二:使用SQLite实现启动时初始化数据 - Python技术站