我使用AsyncStorage
在React Native中存储了一些用户首选项。现在,我需要从后台服务中获取这些偏好。我无法从Java层访问AsyncStorage
。有办法吗?
在iOS中,我们可以导入RCTAsyncLocalStorage.h
并致电_getValueForKey
。但是,我无法在Android中找到一种方法。
答案 0 :(得分:5)
我尝试使用java图层中的AsyncStorage
。但是,我做不到。所以,我构建了一个React Native插件,用于从javascript层访问Android的Native SharedPreferences
。我已经在github(https://github.com/sriraman/react-native-shared-preferences)
现在,我正在使用SharedPreferences
和Java
图层中的React Native
。
答案 1 :(得分:0)
我的解决方案是直接使用ReactDatabaseSupplier
类(我的应用程序不使用Rocksdb
所以我可以确定SQLite数据库总是用作存储(我想它会总是喜欢SQLite数据库而非本地存储))
数据库是一个简单的键值数据库(两列,key
和value
),表名为'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