From 426684ca701e204929d7dc705b48973fced9664c Mon Sep 17 00:00:00 2001 From: zhangxinlogo Date: Tue, 6 Jul 2021 22:41:29 +0800 Subject: [PATCH 1/2] fix stability bug Signed-off-by: zhangxinlogo --- .../dataability/slice/MainAbilitySlice.java | 100 +++++++++++++----- 1 file changed, 75 insertions(+), 25 deletions(-) diff --git a/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java b/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java index 432ae55821..43027aa628 100644 --- a/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java +++ b/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java @@ -15,6 +15,11 @@ package ohos.samples.dataability.slice; +import ohos.app.dispatcher.TaskDispatcher; +import ohos.app.dispatcher.task.TaskPriority; +import ohos.data.rdb.DataObserverAsyncWrapper; +import ohos.eventhandler.EventHandler; +import ohos.eventhandler.EventRunner; import ohos.samples.dataability.ResourceTable; import ohos.samples.dataability.utils.Const; @@ -43,6 +48,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.security.SecureRandom; import java.util.ArrayList; +import java.util.List; /** * MainAbilitySlice @@ -56,7 +62,13 @@ public class MainAbilitySlice extends AbilitySlice { private DataAbilityHelper databaseHelper; - private IDataAbilityObserver dataAbilityObserver = () -> { + private ResultSet resultSet; + + private final DataObserverAsyncWrapper dataObserverAsyncWrapper = new DataObserverAsyncWrapper(() -> + getUITaskDispatcher().syncDispatch(() -> + HiLog.info(LABEL_LOG, "resultSet change")), new EventHandler(EventRunner.create())); + + private final IDataAbilityObserver dataAbilityObserver = () -> { HiLog.info(LABEL_LOG, "%{public}s", "database change"); query(true); }; @@ -69,6 +81,15 @@ public class MainAbilitySlice extends AbilitySlice { initDatabaseHelper(); } + @Override + protected void onStop() { + super.onStop(); + databaseHelper.unregisterObserver(Uri.parse(Const.BASE_URI), dataAbilityObserver); + if (resultSet != null) { + resultSet.unregisterObserver(dataObserverAsyncWrapper); + } + } + private void initComponents() { Component insertButton = findComponentById(ResourceTable.Id_insert_button); insertButton.setClickedListener(this::insert); @@ -142,32 +163,61 @@ public class MainAbilitySlice extends AbilitySlice { } private void query(boolean queryAll) { - String[] columns = new String[] {Const.DB_COLUMN_NAME, Const.DB_COLUMN_AGE, Const.DB_COLUMN_USER_ID}; - DataAbilityPredicates predicates = new DataAbilityPredicates(); - if (!queryAll) { - // test data - predicates.between(Const.DB_COLUMN_USER_ID, 2, 4); - } - try { - ResultSet resultSet = databaseHelper.query(Uri.parse(Const.BASE_URI + Const.DATA_PATH), columns, - predicates); - if (!resultSet.goToFirstRow()) { - HiLog.info(LABEL_LOG, "%{public}s", "query:No result found"); - return; + getGlobalTaskDispatcher(TaskPriority.DEFAULT).asyncDispatch(new Runnable() { + @Override + public void run() { + String[] columns = new String[]{Const.DB_COLUMN_NAME, Const.DB_COLUMN_AGE, Const.DB_COLUMN_USER_ID}; + DataAbilityPredicates predicates = new DataAbilityPredicates(); + if (!queryAll) { + // test data + predicates.between(Const.DB_COLUMN_USER_ID, 2, 4); + } + try { + resultSet = databaseHelper.query(Uri.parse(Const.BASE_URI + Const.DATA_PATH), columns, + predicates); + appendText(resultSet); + } catch (DataAbilityRemoteException | IllegalStateException exception) { + HiLog.error(LABEL_LOG, "%{public}s", "query: dataRemote exception|illegalStateException"); + } } - logText.setText(""); - int nameIndex = resultSet.getColumnIndexForName(Const.DB_COLUMN_NAME); - int ageIndex = resultSet.getColumnIndexForName(Const.DB_COLUMN_AGE); - int userIndex = resultSet.getColumnIndexForName(Const.DB_COLUMN_USER_ID); - do { - String name = resultSet.getString(nameIndex); - int age = resultSet.getInt(ageIndex); - int userId = resultSet.getInt(userIndex); - logText.append(userId + " " + name + " " + age + System.lineSeparator()); - } while (resultSet.goToNextRow()); - } catch (DataAbilityRemoteException | IllegalStateException exception) { - HiLog.error(LABEL_LOG, "%{public}s", "query: dataRemote exception|illegalStateException"); + }); + } + + private void appendText(ResultSet resultSet) { + if (!resultSet.goToFirstRow()) { + HiLog.info(LABEL_LOG, "%{public}s", "query:No result found"); + return; } + int queryCount = 0; + int allowQueryMaxCount = 100; + StringBuilder appendStr = new StringBuilder(); + int nameIndex = resultSet.getColumnIndexForName(Const.DB_COLUMN_NAME); + int ageIndex = resultSet.getColumnIndexForName(Const.DB_COLUMN_AGE); + int userIndex = resultSet.getColumnIndexForName(Const.DB_COLUMN_USER_ID); + do { + queryCount++; + String name = resultSet.getString(nameIndex); + int age = resultSet.getInt(ageIndex); + int userId = resultSet.getInt(userIndex); + appendStr.append(userId + " " + name + " " + age + System.lineSeparator()); + } while (resultSet.goToNextRow() && queryCount < allowQueryMaxCount); + HiLog.info(LABEL_LOG, " queryCount : " + queryCount); + HiLog.info(LABEL_LOG, " appendStr : " + appendStr.toString()); + getUITaskDispatcher().asyncDispatch(new Runnable() { + @Override + public void run() { + logText.setText(""); + logText.setText(appendStr.toString()); + registerResultSetObserver(); + } + }); + } + + private void registerResultSetObserver() { + resultSet.registerObserver(dataObserverAsyncWrapper); + List uris = new ArrayList<>(); + uris.add(Uri.parse((Const.BASE_URI + Const.DATA_PATH))); + resultSet.setAffectedByUris(this, uris); } private void update(Component component) { -- Gitee From 7751f41707ff8b7bd404cb7f45e2c45f9ae4fff1 Mon Sep 17 00:00:00 2001 From: zhangxinlogo Date: Tue, 6 Jul 2021 22:51:02 +0800 Subject: [PATCH 2/2] fix stability bug Signed-off-by: zhangxinlogo --- .../dataability/slice/MainAbilitySlice.java | 32 ++----------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java b/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java index 43027aa628..a341463f73 100644 --- a/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java +++ b/ability/DataAbility/entry/src/main/java/ohos/samples/dataability/slice/MainAbilitySlice.java @@ -15,11 +15,7 @@ package ohos.samples.dataability.slice; -import ohos.app.dispatcher.TaskDispatcher; import ohos.app.dispatcher.task.TaskPriority; -import ohos.data.rdb.DataObserverAsyncWrapper; -import ohos.eventhandler.EventHandler; -import ohos.eventhandler.EventRunner; import ohos.samples.dataability.ResourceTable; import ohos.samples.dataability.utils.Const; @@ -48,7 +44,6 @@ import java.io.IOException; import java.io.InputStreamReader; import java.security.SecureRandom; import java.util.ArrayList; -import java.util.List; /** * MainAbilitySlice @@ -62,13 +57,7 @@ public class MainAbilitySlice extends AbilitySlice { private DataAbilityHelper databaseHelper; - private ResultSet resultSet; - - private final DataObserverAsyncWrapper dataObserverAsyncWrapper = new DataObserverAsyncWrapper(() -> - getUITaskDispatcher().syncDispatch(() -> - HiLog.info(LABEL_LOG, "resultSet change")), new EventHandler(EventRunner.create())); - - private final IDataAbilityObserver dataAbilityObserver = () -> { + private IDataAbilityObserver dataAbilityObserver = () -> { HiLog.info(LABEL_LOG, "%{public}s", "database change"); query(true); }; @@ -81,15 +70,6 @@ public class MainAbilitySlice extends AbilitySlice { initDatabaseHelper(); } - @Override - protected void onStop() { - super.onStop(); - databaseHelper.unregisterObserver(Uri.parse(Const.BASE_URI), dataAbilityObserver); - if (resultSet != null) { - resultSet.unregisterObserver(dataObserverAsyncWrapper); - } - } - private void initComponents() { Component insertButton = findComponentById(ResourceTable.Id_insert_button); insertButton.setClickedListener(this::insert); @@ -173,7 +153,7 @@ public class MainAbilitySlice extends AbilitySlice { predicates.between(Const.DB_COLUMN_USER_ID, 2, 4); } try { - resultSet = databaseHelper.query(Uri.parse(Const.BASE_URI + Const.DATA_PATH), columns, + ResultSet resultSet = databaseHelper.query(Uri.parse(Const.BASE_URI + Const.DATA_PATH), columns, predicates); appendText(resultSet); } catch (DataAbilityRemoteException | IllegalStateException exception) { @@ -208,18 +188,10 @@ public class MainAbilitySlice extends AbilitySlice { public void run() { logText.setText(""); logText.setText(appendStr.toString()); - registerResultSetObserver(); } }); } - private void registerResultSetObserver() { - resultSet.registerObserver(dataObserverAsyncWrapper); - List uris = new ArrayList<>(); - uris.add(Uri.parse((Const.BASE_URI + Const.DATA_PATH))); - resultSet.setAffectedByUris(this, uris); - } - private void update(Component component) { DataAbilityPredicates predicates = new DataAbilityPredicates(); predicates.equalTo(Const.DB_COLUMN_USER_ID, 1); -- Gitee