赞
踩
最近,在学习鸿蒙系统的时候,学到DataAbility的时候一直卡住,原因是文档写的不是太清楚,通过查询不同的资料,终于能利用DataAbility访问数据库了
本项目目标是在表盘上点击按钮就能访问DataAbility的查询方法查询数据库的内容
要想访问数据库,我们得先有一个数据库
如果使用注解处理器的模块为“com.huawei.ohos.hap”模块,则需要在模块的“build.gradle”文件的“ohos”节点中添加以下配置:
compileOptions{ annotationEnabled true }
package com.example.wear2.db;
import ohos.data.orm.OrmDatabase;
import ohos.data.orm.annotation.Database;
@Database(entities = {User.class}, version = 1)
public abstract class BookStore extends OrmDatabase {
}
该数据库中有一张User表
新建user
package com.example.wear2.db; import ohos.data.orm.OrmObject; import ohos.data.orm.annotation.Entity; import ohos.data.orm.annotation.Index; import ohos.data.orm.annotation.PrimaryKey; @Entity(tableName = "user", ignoredColumns = {"ignoreColumn1", "ignoreColumn2"}, indices = {@Index(value = {"firstName", "lastName"}, name = "name_index", unique = true)}) public class User extends OrmObject { // 此处将userId设为了自增的主键。注意只有在数据类型为包装类型时,自增主键才能生效。 @PrimaryKey(autoGenerate = true) private Integer userId; private String firstName; private String lastName; private int age; private double balance; private int ignoreColumn1; private int ignoreColumn2; // 开发者自行添加字段的getter和setter 方法。
打开后可以看到它是继承了Ability的,并且有默认的增删改查方法,对于数据库的增删改查我们只需要在这些方法里面实现即可
{
"visible": true,
"permissions": [
"com.example.wear2.UserDataAbility.DATA"
],
"name": "com.example.wear2.UserDataAbility",
"icon": "$media:icon",
"description": "$string:userdataability_description",
"type": "data",
"uri": "dataability://com.example.wear2.UserDataAbility"
}
在config.json我们可以看到UserDataAbility的相应配置,其中type为data说明这个Ability为DataAbility;permissions为该DataAbility的访问权限,如果别的Ability要访问就需要配置"reqPermissions": [ { "name": "com.example.wear2.UserDataAbility.DATA" }]
;而uri为访问该DataAbility的uri地址
接下来改造 UserDataAbility,首先我们需要添加全局变量
private static final String DATABASE_NAME ="BookStore.db";
private static final String DATABASE_NAME_ALIAS = "BookStore";
private static OrmContext context = null;
其中DATABASE_NAME为数据库文件名;DATABASE_NAME_ALIAS 为创建一个别名;context为数据库操纵接口;
UserDataAbility的onStart方法会在项目启动后运行一次,所有我们将数据库创建以及插入一条数据的代码写在这里,这样项目启动后调用onStart方法创建数据库并插入一条数据
@Override
public void onStart(Intent intent) {
super.onStart(intent);
DatabaseHelper helper = new DatabaseHelper(this); // context入参类型为ohos.app.Context,注意不要使用slice.getContext()来获取context,请直接传入slice,否则会出现找不到类的报错。
context = helper.getOrmContext(DATABASE_NAME_ALIAS, DATABASE_NAME, BookStore.class);
User user = new User();
user.setFirstName("Zhang");
user.setLastName("San");
user.setAge(29);
user.setBalance(100.51);
boolean isSuccessed = context.insert(user);
isSuccessed = context.flush();
HiLog.info(LABEL_LOG, "ProviderAbility onStart");
}
首先在config.json中的MainAbility中添加访问权限
"reqPermissions": [
{
"name": "com.example.wear2.UserDataAbility.DATA"
}]
在MainAbilitySlice中添加一个日志打印变量,用于打印我们访问到的数据
private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "MainAbilitySlice");
在MainAbilitySlice新建一个访问UserDataAbility的方法queryDataAbility()
public void queryDataAbility() throws DataAbilityRemoteException { // 构造查询条件 DataAbilityPredicates predicates = new DataAbilityPredicates(); predicates.equalTo("lastName", "San"); // 进行查询 String[] columns = new String[] {"firstName"}; Uri uri = Uri.parse("dataability:///com.example.wear2.UserDataAbility"); DataAbilityHelper helper = DataAbilityHelper.creator(this); ResultSet resultSet = helper.query(uri,columns,predicates); // 处理结果 HiLog.info(LABEL_LOG, "queryDataAbilitystart"); resultSet.goToFirstRow(); do{ // 在此处理ResultSet中的记录; HiLog.info(LABEL_LOG, "firstName="+resultSet.getString(0)); }while(resultSet.goToNextRow()); }
其中uri 为UserDataAbility配置的uri,但是区别是dataability:后为三个斜杠而不是两个,这个要注意下
UserDataAbility的onStart的按钮监听中,添加调用queryDataAbility方法,这样,当点击按钮后,就会在后台答应查询到的数据库的内容
@Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_main_layout); // 加载XML布局 Button button = (Button) findComponentById(ResourceTable.Id_button); if (button != null) { // 为按钮设置点击回调 button.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { //createStore(); try { queryDataAbility(); } catch (DataAbilityRemoteException e) { e.printStackTrace(); } }
点击按钮后,后台打印查询接口
更多技术交流请加入QQ群
群名称:华为鸿蒙harmonyos开发
群 号:1164091073
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。