DevEco Studio开发鸿蒙app经验分享:创建数据库及与华为云连接 |
您所在的位置:网站首页 › 华为鸿蒙系统在哪里开源服务器 › DevEco Studio开发鸿蒙app经验分享:创建数据库及与华为云连接 |
DevEco Studio开发鸿蒙app经验分享:创建数据库及与华为云连接
更新时间:2021-12-15 15:58:41浏览次数:740+次 以下将HarmonyOS工具DevEco Studio开发鸿蒙app经验分享给大家,功能有两个,一是创建数据库,实现登录注册功能,二是与华为云连接,获取硬件上传至华为云的数据。 实现过程 一、创建数据库 与安卓开发不同,在DevEco Studio中创建数据库时,直接新建data ability即可,如下图所示:
创建完成后,则会出现基本的代码框架。根据需求,填写相应的数据库名称,表名,字段名称等。部分代码如下: private static final String DB_NAME = "xxxx.db"; private static final String TABLE_NAME="xxxx"; private static final String xxxxx = "xxx"; private static final String xxxx = "xxxx"; private static final String xxxx = "xxxx"; private DataAbilityHelper helper; private StoreConfig storeConfig = StoreConfig.newDefaultConfig(DB_NAME); private RdbStore rdbStore; private RdbOpenCallback rdbOpenCallback = new RdbOpenCallback() { @Override public void onCreate(RdbStore rdbStore) { rdbStore.executeSql("create table if not exists " + TABLE_NAME + " (" + xxxx+ " text not null, " + xxx+ " text not null, " + xxxx+ " text not null)"); } @Override public void onUpgrade(RdbStore rdbStore, int i, int i1) { } }; ps:此处一定注意rdbStore.executeSql中的空格,很有可能因为空格而创建失败。 接下来在onStart方法中编写代码: public void onStart(Intent intent) { super.onStart(intent); DatabaseHelper databaseHelper = new DatabaseHelper(this); rdbStore = databaseHelper.getRdbStore(storeConfig,1,rdbOpenCallback,null); } 此处给出往数据库中插入数据的方法: @Override public int insert(Uri uri, ValuesBucket value) { HiLog.info(LABEL_LOG, "DataAbility insert"); String path = uri.getLastPath(); if (!"data".equals(path)) { HiLog.info(LABEL_LOG, "DataAbility insert path is not matched"); return -1; } ValuesBucket values = new ValuesBucket(); values.putString(DB_COLUMB_NAME, value.getString(DB_COLUMB_NAME)); values.putString(DB_COLUMN_PASS, value.getString(DB_COLUMN_PASS)); value.putString(DB_COLUMN_PHONE,values.getString(DB_COLUMN_PHONE)); int index = (int) rdbStore.insert(TABLE_NAME, values); DataAbilityHelper.creator(this, uri).notifyChange(uri); return index; } 至此,数据库就创建成功了。下面介绍如何在注册页面中实现注册功能。 首先定义一个helper,再定义uri,注意,uri在config.json中会有,粘过来即可: private DataAbilityHelper helper; Uri uri = Uri.parse("xxxxx"); 然后在onStart方法中编写代码: public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_register); helper = DataAbilityHelper.creator(this); //数据库的操作都是通过helper进行的 Button insert_again=(Button)findComponentById(ResourceTable.Id_insert_again); //注册按钮 insert_again.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { username = usrname.getText().toString().trim();//获取用户名 pass = password.getText().toString().trim(); //获取密码 get_phone = phone.getText().toString().trim(); //获取手机号码 //向数据库中插入数据 ValuesBucket valuesBucket = new ValuesBucket(); valuesBucket.putString(DB_COLUMB_NAME,username); valuesBucket.putString(DB_COLUMN_PASS,pass); valuesBucket.putString(DB_COLUMN_PHONE,get_phone); try { helper.insert(uri,valuesBucket); toastDialog.setText("注册成功").show(); usrname.setText(""); password.setText(""); phone.setText(""); Intent intent1 = new Intent(); present(new TemperatureSlice(),intent1); terminate(); } catch (DataAbilityRemoteException e) { e.printStackTrace(); } } }); } 至此,就完成了注册功能。 二、与华为云连接 与华为云连接一般有两种方式,可以用官方给出的APK进行连接,另一种是搭建一个本地服务器,华为云将数据转发至本地服务器,手机app再从服务器获取数据并显示。 本地服务器采用Tomcat搭建。 需要进行内网穿透。 在华为云IotDA->规则->数据转发页面创建一个新的规则,选择使用HTTP协议进行数据转发,并将服务器地址填写进去。 最后,要启动规则,并在设备联动中设置触发规则。 至此,完成了华为云向服务器转发数据的功能。 手机app需要获取服务器数据,就需要与服务器之间建立连接,我们选择HTTP方式进行连接。 在安卓开发中,模拟机默认的外部地址是10.0.2.2,但鸿蒙的模拟机并不是这样。它是部署在云端的真机,因此我们需要一个地址,该地址要求输入到鸿蒙模拟机中的浏览器是可以直接访问的。 我们使用了“花生壳”软件进行内网穿透,获得了一个域名,然后再使用HTTP连接的"GET"方法,就可以获取到由华为云端发送至服务器的json数据。 安卓开发中有JSONObject可以对json数据进行解析,鸿蒙中没有该方法,因此需要添加一个外部依赖的包,Jackson,对json数据进行解析。 解析的部分代码如下: public void get_json(String data) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode =objectMapper.readTree(data); JsonNode body = jsonNode.get("notify_data"); JsonNode s = body.get("body"); JsonNode k = s.get("services"); JsonNode o = k.get(0); JsonNode a = o.get("properties"); JsonNode g= a.get("XXX"); //此处需要填写在IotDA中的属性名称 JsonNode e= a.get("XXX"); } 完成json格式的解析后,就可以将其更新在UI中。 此处会出现一个问题,与服务器之间建立连接需要在子线程中操作,而更新UI在主线程中操作,此处就涉及到线程间的通信问题。 在安卓开发中,可以使用Handler()方法实现线程间的通信功能,在鸿蒙中,可以使用如下方法: 首先定义三个变量: private EventHandler myEventHandler5; private EventRunner runnerA; private EventRunner eventrunner; 再定义一个任务分发: TaskDispatcher schule = createParallelTaskDispatcher("schdule", TaskPriority.DEFAULT); runnerA=EventRunner.create(false); eventrunner = EventRunner.getMainEventRunner(); 接下来就可以在myEventHandler5中定义操作: myEventHandler5 = new EventHandler(eventrunner){ @Override protected void processEvent(InnerEvent event) { super.processEvent(event); if(event==null){ return; } int eventId = event.eventId; switch (eventId){ case 1: { //更新UI操作 break; } case 2: { break; } default: break; } } }; 然后在线程中: public void run() { while (true){ //此处写成死循环,是为了让APP与服务器一直通信,若没有这句,则连接只进行一次 try { msg = HttpGet(path); //与服务器进行连接,并获取json格式数据 myEventHandler5.sendEvent(1);//向主线程发送eventID为1的事件,即更新UI Thread.sleep(5000); //线程睡眠5s再进行连接 } catch (InterruptedException e) { e.printStackTrace(); } } } 至此,就完成了获取数据并更新在UI的功能。 说明 作者才疏学浅,代码有问题或者解释有误的地方还请见谅。 将这一段开发经历与大家分享,主要也是因为鸿蒙开发相关资料在网上较少,我也是借鉴了不少优秀博主的经验贴以及鸿蒙社区高手的帮助,才基本实现了一些简单的功能。 若有问题或者错误,欢迎各位鸿蒙开发者批评指正。 相关参考:鸿蒙开发者分享,C语言编写鸿蒙手机软件方法。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |