Skip to content

Commit 9823e89

Browse files
author
Krzysztof
authored
[Android]: Database locale issues (#423)
Make sure that we close db connection when 'host' is destroyed and re-create it when needed
1 parent b1b5bcf commit 9823e89

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

android/src/main/java/com/reactnativecommunity/asyncstorage/AsyncStorageModule.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.facebook.react.bridge.Arguments;
1616
import com.facebook.react.bridge.Callback;
1717
import com.facebook.react.bridge.GuardedAsyncTask;
18+
import com.facebook.react.bridge.LifecycleEventListener;
1819
import com.facebook.react.bridge.ReactApplicationContext;
1920
import com.facebook.react.bridge.ReactContextBaseJavaModule;
2021
import com.facebook.react.bridge.ReactMethod;
@@ -33,7 +34,7 @@
3334

3435
@ReactModule(name = AsyncStorageModule.NAME)
3536
public final class AsyncStorageModule
36-
extends ReactContextBaseJavaModule implements ModuleDataCleaner.Cleanable {
37+
extends ReactContextBaseJavaModule implements ModuleDataCleaner.Cleanable, LifecycleEventListener {
3738

3839
// changed name to not conflict with AsyncStorage from RN repo
3940
public static final String NAME = "RNC_AsyncSQLiteDBStorage";
@@ -91,6 +92,7 @@ public AsyncStorageModule(ReactApplicationContext reactContext) {
9192
AsyncStorageModule(ReactApplicationContext reactContext, Executor executor) {
9293
super(reactContext);
9394
this.executor = new SerialExecutor(executor);
95+
reactContext.addLifecycleEventListener(this);
9496
mReactDatabaseSupplier = ReactDatabaseSupplier.getInstance(reactContext);
9597
}
9698

@@ -118,6 +120,18 @@ public void clearSensitiveData() {
118120
mReactDatabaseSupplier.clearAndCloseDatabase();
119121
}
120122

123+
@Override
124+
public void onHostResume() {}
125+
126+
@Override
127+
public void onHostPause() {}
128+
129+
@Override
130+
public void onHostDestroy() {
131+
// ensure we close database when activity is destroyed
132+
mReactDatabaseSupplier.closeDatabase();
133+
}
134+
121135
/**
122136
* Given an array of keys, this returns a map of (key, value) pairs for the keys found, and
123137
* (key, null) for the keys that haven't been found.

android/src/main/java/com/reactnativecommunity/asyncstorage/ReactDatabaseSupplier.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,13 @@
77

88
package com.reactnativecommunity.asyncstorage;
99

10-
import javax.annotation.Nullable;
11-
1210
import android.content.Context;
1311
import android.database.sqlite.SQLiteDatabase;
1412
import android.database.sqlite.SQLiteException;
1513
import android.database.sqlite.SQLiteOpenHelper;
16-
1714
import com.facebook.common.logging.FLog;
1815
import com.facebook.react.common.ReactConstants;
16+
import javax.annotation.Nullable;
1917

2018
/**
2119
* Database supplier of the database used by react native. This creates, opens and deletes the
@@ -151,7 +149,7 @@ private synchronized boolean deleteDatabase() {
151149
return mContext.deleteDatabase(DATABASE_NAME);
152150
}
153151

154-
private synchronized void closeDatabase() {
152+
public synchronized void closeDatabase() {
155153
if (mDb != null && mDb.isOpen()) {
156154
mDb.close();
157155
mDb = null;

0 commit comments

Comments
 (0)