我正在iOS上使用RocksDB,并且正在使用AsyncStorage适配器以及redux-persist。每当我启动应用程序时,都会出现错误:
Failed to open db at path /Users/chadwilken/Library/Developer/CoreSimulator/Devices/818C47D2-ECF0-4003-865E-1FCAADCEF624/data/Containers/Data/Application/6C4F8F80-52E3-48B1-8ED5-84FB9F087514/Documents/RKAsyncRocksDBStorage.
RocksDB Status: IO error: lock /Users/chadwilken/Library/Developer/CoreSimulator/Devices/818C47D2-ECF0-4003-865E-1FCAADCEF624/data/Containers/Data/Application/6C4F8F80-52E3-48B1-8ED5-84FB9F087514/Documents/RKAsyncRocksDBStorage/LOCK: No locks available.
Run Code Online (Sandbox Code Playgroud)
充当适配器的类是:
// Copyright 2004-present Facebook. All Rights Reserved.
#import "AsyncRocksDBStorage.h"
#include <string>
#import <Foundation/Foundation.h>
#import <RCTConvert.h>
#import <RCTLog.h>
#import <RCTUtils.h>
#include <rocksdb/db.h>
#include <rocksdb/merge_operator.h>
#include <rocksdb/options.h>
#include <rocksdb/slice.h>
#include <rocksdb/status.h>
static NSString *const RKAsyncRocksDBStorageDirectory = @"RKAsyncRocksDBStorage";
namespace {
rocksdb::Slice SliceFromString(NSString *string)
{
return rocksdb::Slice((const char *)[string UTF8String], [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
}
void deepMergeInto(NSMutableDictionary *output, NSDictionary *input) {
for (NSString *key in input) …Run Code Online (Sandbox Code Playgroud) 我正在使用Async Storage在我的本机应用程序中存储一些值.我有一个登录,所以当我登录到应用程序时,我正在存储我的ID,当我退出时我正在删除它.
但是当在没有注销的情况下卸载我的应用程序时,异步存储中的数据不会删除,这意味着在再次安装应用程序时会自动登录.
你可以告诉我如何解决这个问题在Android设备和版本> 6
谢谢.
React Native提供了AsyncStorage库作为在RN应用程序中存储持久数据的方法.通常,AsyncStorage使用非常简单,除了一个方面:
两个主要AsyncStorage功能,AsyncStorage.getItem并AsyncStorage.setItem返回Promises.这很容易理解:函数执行的实际查询或保存在后台运行,项目的获取或保存可能会失败,需要我们查看catch错误.
但是,似乎在React Native文档中没有任何地方指出了什么,确切地说,是AsyncStorage在调用时setItem或者在调用时应该出现的错误或错误getItem.当然,可以推断出可能存在的一些错误情况:一个可能尝试getItem使用不存在的密钥,或者可能尝试setItem在完整或接近完整的存储中运行,操作系统可能拒绝为您释放更多的磁盘空间应用程序,但没有一个完整的列表是令人沮丧的.
很高兴知道确实AsyncStorage可能会失败,因此正在开发使用数据持久性的React Native应用程序的人可能确切地知道他们需要处理哪些失败案例.
我正在使用redux-persistReact Native项目,该项目在除Android 7之外的许多设备上都能正常运行。我试图调试为什么我的本地存储不持久的问题,并发现了这一点:
以下代码在React Native组件生命周期内执行
componentDidMount() {
attachObservables(store)
setInterval(async () => {
console.log('Inside setInterval')
const data = await AsyncStorage.getAllKeys()
console.log('inside the getAllKeys')
data.forEach(async k => {
const value = await AsyncStorage.getItem(k)
console.group(k)
console.log(value)
console.groupEnd()
})
}, 3000)
}
Run Code Online (Sandbox Code Playgroud)
从不调用“ Inside setInterval”之后的代码。如果在setInterval之外,它将仅运行一次。如果我一次调用setInterval 之外的代码,它似乎可以正常运行。我也尝试过回调格式与异步/等待版本,但这似乎无关紧要。
我在使用firebase js库时遇到了同样的问题(在第一个回调之后永远不会返回回调)。我现在正在寻找替代方法来解决此问题。
有任何想法吗?
我正在创建和下载,上传,存储许多图像的应用程序。我正在尝试查看如何最好地管理数据以提高性能。
我正在使用Redux来存储我的应用程序的状态,并且我使用redux-persist来将状态存储在AsyncStorage中。
但我也了解到create-react-native-app在expo包中还提供了一个称为SQLite的模块。(https://docs.expo.io/versions/latest/sdk/sqlite.html)。
我试图找出在哪里存储我的数据是一个好主意。
我应该将所有图像(base64编码)存储到redux吗?这可能多达100mb的数据。还是我应该将图像存储到SQLite中(假设数据像sqlite“ .db”文件一样平放)?
我将我的应用程序的身份验证令牌存储在 AsyncStorage 中。似乎在 Android 和 iOS 上(对这个不太确定),在长时间不活动(约 2 周)后,用户都会被注销。 我确信它与服务器无关。
AsyncStorage 是永久性的吗?
编辑:嗯,这很尴尬。问题出在服务器上,并不是 AsyncStorage 的错。
我正在使用 react native async storage 它运行良好,但在某些情况下,我必须为数据设置到期日期并刷新我检查过的存储
AsyncStorage 文档,但没有设置在特定时间后过期的选项。
唯一可用的选项是:-
AsyncStorage.removeItem
Run Code Online (Sandbox Code Playgroud) 我正在测试依赖于 的函数@react-native-community/async-storage,所以显然我的测试必须模拟该库。
所以我在我的内部这样做jestSetupFile.js:
import mockAsyncStorage from '@react-native-community/async-storage/jest/async-storage-mock';
jest.mock('@react-native-community/async-storage', () => mockAsyncStorage);
Run Code Online (Sandbox Code Playgroud)
这是来自https://github.com/react-native-community/react-native-async-storage/blob/master/docs/Jest-integration.md 的直接指令
但是,导出的文件有type关键字,我的 JavaScript 环境无法解析:
? Test suite failed to run
/Users/someuser/myprojects/myproject/node_modules/@react-native-community/async-storage/jest/async-storage-mock.js:6
type KeysType = Array<string>;
^^^^^^^^
SyntaxError: Unexpected identifier
Run Code Online (Sandbox Code Playgroud)
果然,当我检查该async-storage-mock.js路径中的文件时,它包含type关键字,我认为这是导致此问题的根本原因。
我在这里做错了什么?
我正在使用 @react-native-community/async-storage 并不断收到此警告:
Warning: Async Storage has been extracted from react-native core and will be removed in a future release. It can now be installed and imported from '@react-native-community/async-storage' instead of 'react-native'. See https://github.com/react-native-community/react-native-async-storage
这是我的 package.json:
{
"name": "mobile_app",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"@aws-amplify/pushnotification": "^1.0.32",
"@react-native-community/async-storage": "^1.6.1",
"aws-amplify": "^1.1.32",
"aws-amplify-react-native": "^2.1.15",
"buffer": "^5.3.0",
"moment": "^2.24.0",
"react": "16.8.3",
"react-native": "0.59.9",
"react-native-ble-plx": "^1.0.3",
"react-native-calendars": "^1.208.0",
"react-native-check-box": "^2.1.7",
"react-native-dialog": "^5.6.0",
"react-native-gesture-handler": "^1.3.0", …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行 react-native run-android 但收到以下错误:
Error: Command failed: gradlew.bat app:installDebug -PreactNativeDevServerPort=8081
D:\Work\CS\Wms-Mobile\CS-WmsMobile\node_modules\@react-native-community\async-storage\android\src\main\java\com\reactnativecommunity\asyncstorage\AsyncStorageModule.java:26: error: package com.facebook.react.module.annotations does not exist
import com.facebook.react.module.annotations.ReactModule;
^
D:\Work\CS\Wms-Mobile\CS-WmsMobile\node_modules\@react-native-community\async-storage\android\src\main\java\com\reactnativecommunity\asyncstorage\AsyncStorageModule.java:34: error: cannot find symbol
@ReactModule(name = AsyncStorageModule.NAME)
^
symbol: class ReactModule
2 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':react-native-community_async-storage:compileDebugJavaWithJavac'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log …Run Code Online (Sandbox Code Playgroud)