使用 AsyncStorage 在屏幕之间传递数据
Passing data between screens with AsyncStorage
我正在开发一个 Messenger 应用程序,我正在尝试通过电子邮件搜索朋友。因此,当用户在提示文本字段中输入另一个用户的电子邮件时,键入的电子邮件与服务器上的电子邮件进行比较,如果找到匹配项,则它会在服务器上以及在应用程序中创建与新朋友的新聊天。
我有一个名为 Messages.js 的屏幕和另一个名为 firebaseChatModule.js 的屏幕,它负责所有后端进程。我需要做什么:如果找到匹配项,则将键入的电子邮件传递给后端。我尝试使用 AsyncStorage 做到这一点,但问题是:每次我收到 null 而不是电子邮件。
我该如何修复它,还有其他简单的方法可以解决这个问题吗?
截图:Messages.js:
firebaseChatModule.js:
更新:
好的,现在可以了,感谢 Nirmalsinh 的回答,但现在我在服务器上遇到以下问题:
User1 是我输入的电子邮件,但是有一些奇怪的字符,例如双“”和/
我该如何解决这个问题?
您需要使用如下的setItem:
try {
AsyncStorage.setItem('email', YOUR_VALUE)
} catch (error) {
}
检索:
AsyncStorage.getItem('email').then((email) => {
console.log(email)
// YOU CAN KEEP YOUR WHOLE CODE FOR getChatId
}).done();
} catch (error) {
}
您的更新代码:
///firebaseChatModule.js
getChatId = () => {
try{
AsyncStorage.getItem('email').then((email) => {
console.log(email)
const IDloc = firebase.database().ref('/rooms');
const newChat = IDloc.push({
title: 'New chat over again'
});
const ChatID = newChat.key;
const membersList = firebase.database().ref('/members').child(ChatID);
const user1 = email
console.log('user1: ', user1);
const user = firebase.auth().currentUser;
membersList.set({
user1: user1,
user2: user.email
});
}).done();
} catch (error) {
}
}
//Messages.js
findUserEmail = (email) => {
firebase.database()
.ref(`/users`)
.orderByChild("email")
.equalTo(email)
.once("value")
.then(snapshot => {
var user = firebase.auth().currentUser;
if (email === user.email) {
Alert.alert("Email is the same as yours!")
} else {
if (snapshot.val()) {
const value = snapshot.val()
this.setState({ email1: email })
const email2 = this.state.email1
AsyncStorage.setItem('email', JSON.stringify(this.state.email1));
console.log('email1: ', this.state.email1);
console.log('email2: ', email2);
FirebaseChatModule.getChatId()
this.setState({ users: Object.keys(value).map((id) => ({
id,
...value[id]
})), promptVisible: false})
} else {
Alert.alert("Email doesn't exist")
}
}
})
}
我正在开发一个 Messenger 应用程序,我正在尝试通过电子邮件搜索朋友。因此,当用户在提示文本字段中输入另一个用户的电子邮件时,键入的电子邮件与服务器上的电子邮件进行比较,如果找到匹配项,则它会在服务器上以及在应用程序中创建与新朋友的新聊天。
我有一个名为 Messages.js 的屏幕和另一个名为 firebaseChatModule.js 的屏幕,它负责所有后端进程。我需要做什么:如果找到匹配项,则将键入的电子邮件传递给后端。我尝试使用 AsyncStorage 做到这一点,但问题是:每次我收到 null 而不是电子邮件。
我该如何修复它,还有其他简单的方法可以解决这个问题吗?
截图:Messages.js:
firebaseChatModule.js:
更新:
好的,现在可以了,感谢 Nirmalsinh 的回答,但现在我在服务器上遇到以下问题:
User1 是我输入的电子邮件,但是有一些奇怪的字符,例如双“”和/
我该如何解决这个问题?
您需要使用如下的setItem:
try {
AsyncStorage.setItem('email', YOUR_VALUE)
} catch (error) {
}
检索:
AsyncStorage.getItem('email').then((email) => {
console.log(email)
// YOU CAN KEEP YOUR WHOLE CODE FOR getChatId
}).done();
} catch (error) {
}
您的更新代码:
///firebaseChatModule.js
getChatId = () => {
try{
AsyncStorage.getItem('email').then((email) => {
console.log(email)
const IDloc = firebase.database().ref('/rooms');
const newChat = IDloc.push({
title: 'New chat over again'
});
const ChatID = newChat.key;
const membersList = firebase.database().ref('/members').child(ChatID);
const user1 = email
console.log('user1: ', user1);
const user = firebase.auth().currentUser;
membersList.set({
user1: user1,
user2: user.email
});
}).done();
} catch (error) {
}
}
//Messages.js
findUserEmail = (email) => {
firebase.database()
.ref(`/users`)
.orderByChild("email")
.equalTo(email)
.once("value")
.then(snapshot => {
var user = firebase.auth().currentUser;
if (email === user.email) {
Alert.alert("Email is the same as yours!")
} else {
if (snapshot.val()) {
const value = snapshot.val()
this.setState({ email1: email })
const email2 = this.state.email1
AsyncStorage.setItem('email', JSON.stringify(this.state.email1));
console.log('email1: ', this.state.email1);
console.log('email2: ', email2);
FirebaseChatModule.getChatId()
this.setState({ users: Object.keys(value).map((id) => ({
id,
...value[id]
})), promptVisible: false})
} else {
Alert.alert("Email doesn't exist")
}
}
})
}