我可以从java层访问存储在React Native的AsyncStorage中的数据吗?

时间:2016-05-11 13:56:54

标签: java android react-native

我使用AsyncStorage在React Native中存储了一些用户首选项。现在,我需要从后台服务中获取这些偏好。我无法从Java层访问AsyncStorage。有办法吗?

在iOS中,我们可以导入RCTAsyncLocalStorage.h并致电_getValueForKey。但是,我无法在Android中找到一种方法。

5 个答案:

答案 0 :(得分:5)

我尝试使用java图层中的AsyncStorage。但是,我做不到。所以,我构建了一个React Native插件,用于从javascript层访问Android的Native SharedPreferences。我已经在github(https://github.com/sriraman/react-native-shared-preferences

中发布了它

现在,我正在使用SharedPreferencesJava图层中的React Native

答案 1 :(得分:0)

我的解决方案是直接使用ReactDatabaseSupplier类(我的应用程序不使用Rocksdb所以我可以确定SQLite数据库总是用作存储(我想它会总是喜欢SQLite数据库而非本地存储))

数据库是一个简单的键值数据库(两列,keyvalue),表名为'catalystLocalStorage'(您可以尝试阅读ReactDatabaseSupplier#TABLE_NAME但它是受保护,你可以尝试使用反射,但我不确定这是值得的麻烦)

Cursor catalystLocalStorage = null;
SQLiteDatabase readableDatabase = null;

try {
  readableDatabase = ReactDatabaseSupplier.getInstance(this.getApplicationContext()).getReadableDatabase();
  catalystLocalStorage = readableDatabase.query("catalystLocalStorage", new String[]{"value"}, "key = ?", new String[] { "keyName" }, null, null, null);
  final String value = catalystLocalStorage.getString(catalystLocalStorage.getColumnIndex("value"));
  [...]
} finally { 
  if (catalystLocalStorage != null) {
    catalystLocalStorage.close();
  }

  if (readableDatabase != null) {
    readableDatabase.close();
  }
}

它对我有用,不确定它是否具有未来发展性

答案 2 :(得分:0)

我有以下代码来完成这项工作。

SQLiteDatabase readableDatabase = null;
readableDatabase = ReactDatabaseSupplier.getInstance(this.getApplicationContext()).getReadableDatabase();
if (readableDatabase != null) {
   String impl = AsyncLocalStorageUtil.getItemImpl(readableDatabase, "myTableName");
   Log.d(TAG, "impl: " + impl);
}

答案 3 :(得分:0)

使用 react-native-default-preference。它比 react-native-shared-preferences 更好。

答案 4 :(得分:0)

是的,你可以。 反应原生 您需要在返回值的 React Native 中创建方法。 本国的 使用 facebook 提供的 PackagesModule 类从 Native 访问 React-native 方法 使用这个可以访问AsyncStorage

Android Native Modules