2016-05-11 13 views
5

Tôi đang lưu trữ một số tùy chọn người dùng trong React Native bằng cách sử dụng AsyncStorage. Bây giờ, tôi cần phải có được những ưu tiên từ một dịch vụ nền. Tôi không thể truy cập AsyncStorage từ lớp Java. Có cách nào để làm điều đó?Tôi có thể truy cập dữ liệu được lưu trữ trong AsyncStorage của React Native từ lớp java không?

Trong iOS, chúng tôi có thể nhập RCTAsyncLocalStorage.h và gọi _getValueForKey. Nhưng, tôi không thể tìm ra cách để làm điều đó trong Android.

Trả lời

5

Tôi đã cố gắng sử dụng AsyncStorage từ lớp java. Nhưng, tôi không thể. Vì vậy, tôi đã xây dựng một plugin React Native để truy cập Native SharedPreferences của Android từ lớp javascript. Tôi đã xuất bản nó trong github (https://github.com/sriraman/react-native-shared-preferences)

Bây giờ tôi đang sử dụng này SharedPreferences từ cả hai lớp JavaReact Native.

0

Giải pháp của tôi là sử dụng trực tiếp lớp ReactDatabaseSupplier (ứng dụng của tôi không sử dụng Rocksdb để tôi có thể chắc chắn rằng DB SQLite luôn được sử dụng làm bộ nhớ (và, tôi đoán nó sẽ luôn thích cơ sở dữ liệu SQLite hơn cục bộ lưu trữ))

Cơ sở dữ liệu là một DB giá trị khóa đơn giản (hai cột, keyvalue), với một tên bảng 'catalystLocalStorage' (bạn có thể thử để đọc ReactDatabaseSupplier#TABLE_NAME nhưng nó được bảo vệ, bạn có thể thử sử dụng phản chiếu, nhưng tôi không chắc chắn nó có giá trị khó khăn)

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(); 
    } 
} 

Nó hoạt động với tôi, không chắc chắn làm thế nào trong tương lai-bằng chứng nó có thể là

0

Tôi có mã sau đây thực hiện công việc.

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

Tôi đang sử dụng '' 'redux-persist''', bạn có biết làm cách nào để biết tên' '' myTableName''' – Pablo

Các vấn đề liên quan