我正在使用AsyncStorage.clear()它在Android上工作得很好但是当使用iOS平台(真实设备)运行时我收到此错误并且无法在线找到任何关于它的信息.
Error: Failed to delete storage directory.Error Domain=NSCocoaErrorDomain Code=4 "“RCTAsyncLocalStorage_V1” couldn’t be removed." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/281A6456-6CB2-47D4-AD04-3EB26A1B9506/Documents/RCTAsyncLocalStorage_V1, NSUserStringVariant=(
Remove
), NSUnderlyingError=0x174049480 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
Error: Failed to delete storage directory.Error Domain=NSCocoaErrorDomain Code=4 "“RCTAsyncLocalStorage_V1” couldn’t be removed." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/281A6456-6CB2-47D4-AD04-3EB26A1B9506/Documents/RCTAsyncLocalStorage_V1, NSUserStringVariant=(
Remove
), NSUnderlyingError=0x174049480 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}
at convertError (http://192.168.1.33.xip.io:8081/index.ios.bundle?platform=ios&dev=true&minify=false:52255:13)
at http://192.168.1.33.xip.io:8081/index.ios.bundle?platform=ios&dev=true&minify=false:52109:18
at MessageQueue.__invokeCallback (http://192.168.1.33.xip.io:8081/index.ios.bundle?platform=ios&dev=true&minify=false:2060:16)
at http://192.168.1.33.xip.io:8081/index.ios.bundle?platform=ios&dev=true&minify=false:1853:15
at MessageQueue.__guard (http://192.168.1.33.xip.io:8081/index.ios.bundle?platform=ios&dev=true&minify=false:1991:9)
at MessageQueue.invokeCallbackAndReturnFlushedQueue (http://192.168.1.33.xip.io:8081/index.ios.bundle?platform=ios&dev=true&minify=false:1852:13)
at t (file:///Applications/React%20Native%20Debugger.app/Contents/Resources/app.asar/js/RNDebuggerWorker.js:1:14632)
Run Code Online (Sandbox Code Playgroud) 在React Native Navigation库中'react-navigation'
我如何通过AsyncStorage设置StackNavigator initialRouteName?
function getInitialScreen() {
AsyncStorage.getItem('initialScreen')
.then(screenName => {
return (screenName)
? screenName
: 'Login';
})
.catch(err => {});
}
const Navigator = StackNavigator({
Splash: { screen: Splash },
Login: { screen: Login },
WebPage: { screen: WebPage }
}, {
initialRouteName: getInitialScreen()
});
Run Code Online (Sandbox Code Playgroud) 我想在AsyncStorage.setItem里面用AsyncStorage.getItem。如何以正确的方式做到这一点?
我的代码如下:
createVehicle: function (vehicle, cb) {
AsyncStorage.getItem('vehicle')
.then(json => {
let vehicles = [];
if (json) {
vehicles = JSON.parse(json);
let o_vehicle = filter(vehicles, {autralis_id: vehicle.autralis_id});
if (o_vehicle.length > 0) {
cb(o_vehicle[0].id);
return;
} else {
vehicles.push(vehicle);
}
} else {
vehicles.push(vehicle);
}
AsyncStorage.setItem('vehicle', JSON.stringify(vehicles), () => {
cb(vehicle.id + 1)
});
}).done();
},
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
我目前正在为我的应用程序的聊天功能编写 react-native。
我使用 Firebase 作为邮箱。由于我不想将聊天数据保存在我们的数据库中,因此我决定将消息保存到设备数据库 AsyncStorage。
所以,步骤是这样的:
1) 用户 B 的设备在 Firebase 上监听他的邮箱变化
2) 用户 A 向 Firebase 上的用户 B 邮箱发送消息
3) 由于 Firebase 侦听器,用户 B 收到了新消息
4) 用户 B 的设备将新消息保存到 AsyncStorage
5) 用户 B 的设备检测到 AsyncStorage 的变化并更新 Chat 的 UI
来到这里,我需要一个监听器来监听 AsyncStorage 的变化,以便 UI 可以相应地更新。
这来到了主题:我可以向 AsyncStorage 添加侦听器或触发器,如 Oracle 数据库中的 DB 触发器吗?
另外,我还想知道是否应该将用户的消息保存在我的服务器数据库中。谢谢
我正在考虑如何在编写的文档中使用React-native AsyncStorage multiGet:
AsyncStorage.multiGet(keys, (err, stores) => {
Run Code Online (Sandbox Code Playgroud)
但这些键应该如何正常?以下是它们在我的应用程序中的设置方式:
AsyncStorage.multiSet([['@BarcodeList', JSON.stringify(scanedList)], ['@ScannedBarcode', gotCode]]);
Run Code Online (Sandbox Code Playgroud)
没关系,但是如何使用multiGet检索数据呢?使用getItem似乎工作,我做错了什么?下面两个(getItem,multiGet).
AsyncStorage.multiGet(["@BarcodeList", "@ScannedBarcode"]).then((scanedList2, scannedBarcode) => {
//AsyncStorage.getItem("@BarcodeList").then((scanedList2) => {
Run Code Online (Sandbox Code Playgroud) 我想用AsyncStorage存储项目列表.该列表将随着时间的推移而更新.
以下是列表可以处于的状态示例:
[
{
name: "Alice",
email: "alice@example.com"
},
{
name: "Bob",
email: "bob@example.com",
address: "30 Madison Ave., NY"
}
]
Run Code Online (Sandbox Code Playgroud)
现在,似乎有两个选项可用于存储此列表:
这两种方法都有优势 - React Native最喜欢什么?
在原生 iOS 代码中,我可以使用NSUserDefaults来存储和获取数据,这是同步操作。在 react-native 中,提供的是使用AsyncStorage,但我需要一个同步存储的解决方案,比如NSUserDefaults. 我将使用数据获取的结果来确定要显示哪个屏幕,但由于它是异步的,因此在尝试获取持久数据时总是未定义。
我有一个 React Native 应用程序。我将用户名和 uid 存储在 AsyncStorage 中,因此他们不必每次都登录。如何使用这些值填充 initialState。有一些包可以为你做这件事,但看起来这应该是可行的,而没有另一个包的开销。现在初始状态只是空值。
const initialState = {
uid: "",
username: "",
};
Run Code Online (Sandbox Code Playgroud) 在我的 React Native App 中,我想创建一个 Axios 实例,以使用从AsyncStorage. 但是,以下Token()始终返回一个对象( Promise )而不是实际令牌,因此“授权”标头类似于[Object object].
import axios from 'react-native-axios'
import AsyncStorage from "@react-native-community/async-storage"
const Token = async () => {
try {
await AsyncStorage.getItem("token").then(
token => token
);
} catch (error) {
return null;
}
}
export default axios.create({
baseURL: 'http://192.168.1.100:8080/api',
headers: {
'Authorization': 'Bearer '+ Token(),
'Content-Type': 'application/json'
}
})
Run Code Online (Sandbox Code Playgroud)
如何获取实际令牌并在 axios 实例中使用它?
有没有办法订阅AsyncStorage值的变化?我在一个地方有一个设置,保存在AsyncStorage应用程序中,它会影响所有其他屏幕。我需要观察该值,以便可以更新所有屏幕。我尝试了该getValue方法,但它似乎最初只获得一个值,并且不会在更改时更新。
asyncstorage ×10
react-native ×10
android ×1
async-await ×1
axios ×1
chat ×1
firebase ×1
ios ×1
javascript ×1
reactjs ×1
redux ×1