You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2018/12/26 09:02:44 UTC

[incubator-weex] branch master updated: Android data base fix (#1970)

This is an automated email from the ASF dual-hosted git repository.

kyork pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new e8a7c93  Android data base fix (#1970)
e8a7c93 is described below

commit e8a7c932bb75109decfc64f3d39303da33c82418
Author: lvfen <28...@qq.com>
AuthorDate: Wed Dec 26 17:02:40 2018 +0800

    Android data base fix (#1970)
    
    * [Android]fix WXSQLiteOpenHelper crash
---
 .../weex/appfram/storage/DefaultWXStorage.java     | 21 +++++----
 .../weex/appfram/storage/WXSQLiteOpenHelper.java   | 51 ++++++++++++----------
 2 files changed, 42 insertions(+), 30 deletions(-)

diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java
index 2898848..226525b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java
@@ -143,15 +143,20 @@ public class DefaultWXStorage implements IWXStorageAdapter {
 
     @Override
     public void close() {
-        try {
-            mDatabaseSupplier.closeDatabase();
-            if (mExecutorService != null) {
-                mExecutorService.shutdown();
-                mExecutorService = null;
+        execute(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    mDatabaseSupplier.closeDatabase();
+                    if (mExecutorService != null) {
+                        mExecutorService.shutdown();
+                        mExecutorService = null;
+                    }
+                } catch (Exception e) {
+                    WXLogUtils.e(WXSQLiteOpenHelper.TAG_STORAGE, e.getMessage());
+                }
             }
-        } catch (Exception e) {
-            WXLogUtils.e(WXSQLiteOpenHelper.TAG_STORAGE, e.getMessage());
-        }
+        });
     }
 
     private boolean performSetItem(String key, String value, boolean isPersistent, boolean allowRetryWhenFull) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java
index ff67808..4477030 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java
@@ -150,33 +150,40 @@ public class WXSQLiteOpenHelper extends SQLiteOpenHelper {
         if (mDb != null && mDb.isOpen()) {
             return;
         }
-        // Sometimes retrieving the database fails. We do 2 retries: first without database deletion
-        // and then with deletion.
-        for (int tries = 0; tries < 2; tries++) {
-            try {
-                if (tries > 0) {
-                    //delete db and recreate
-                    deleteDB();
+
+        try {
+            // Sometimes retrieving the database fails. We do 2 retries: first without database deletion
+            // and then with deletion.
+            for (int tries = 0; tries < 2; tries++) {
+                try {
+                    if (tries > 0) {
+                        //delete db and recreate
+                        deleteDB();
+                    }
+                    mDb = getWritableDatabase();
+                    break;
+                } catch (SQLiteException e) {
+                    e.printStackTrace();
+                }
+                // Wait before retrying.
+                try {
+                    Thread.sleep(SLEEP_TIME_MS);
+                } catch (InterruptedException ie) {
+                    Thread.currentThread().interrupt();
                 }
-                mDb = getWritableDatabase();
-                break;
-            } catch (SQLiteException e) {
-                e.printStackTrace();
             }
-            // Wait before retrying.
-            try {
-                Thread.sleep(SLEEP_TIME_MS);
-            } catch (InterruptedException ie) {
-                Thread.currentThread().interrupt();
+            if(mDb == null){
+                return;
             }
-        }
-        if(mDb == null){
-            return;
-        }
 
-        createTableIfNotExists(mDb);
+            createTableIfNotExists(mDb);
+
+            mDb.setMaximumSize(mMaximumDatabaseSize);
+        } catch (Throwable e) {
+            mDb = null;
+            WXLogUtils.d(TAG_STORAGE,"ensureDatabase failed, throwable = " + e.getMessage());
+        }
 
-        mDb.setMaximumSize(mMaximumDatabaseSize);
     }
 
     public synchronized void setMaximumSize(long size) {