Firebase 使用异步存储在屏幕之间传递数据

Firebase 使用异步存储在屏幕之间传递数据,firebase,react-native,firebase-realtime-database,asyncstorage,Firebase,React Native,Firebase Realtime Database,Asyncstorage,我正在开发一个messenger应用程序,我正在尝试通过电子邮件搜索朋友。因此,当用户在提示文本字段中输入另一个用户的电子邮件时,键入的电子邮件将与服务器上的电子邮件进行比较,如果找到匹配项,则会在服务器上以及应用程序中创建与新朋友的新聊天 我有一个屏幕名为Messages.js,第二个屏幕名为firebaseChatModule.js,负责所有后端进程。我需要做的是:如果找到匹配项,然后将键入的电子邮件传递到后端。我尝试使用AsyncStorage做到这一点,但问题是:每次我收到的都是null

我正在开发一个messenger应用程序,我正在尝试通过电子邮件搜索朋友。因此,当用户在提示文本字段中输入另一个用户的电子邮件时,键入的电子邮件将与服务器上的电子邮件进行比较,如果找到匹配项,则会在服务器上以及应用程序中创建与新朋友的新聊天

我有一个屏幕名为Messages.js,第二个屏幕名为firebaseChatModule.js,负责所有后端进程。我需要做的是:如果找到匹配项,然后将键入的电子邮件传递到后端。我尝试使用AsyncStorage做到这一点,但问题是:每次我收到的都是null而不是电子邮件

我如何修复它,还有其他简单的方法吗

屏幕截图:Messages.js:

firebaseChatModule.js:

upd:

好的,现在它工作了,thx向Nirmalsinh寻求答案,但现在我在服务器上遇到以下问题:

User1是我输入的电子邮件,但是有一些奇怪的字符,例如double“”和/


我怎样才能解决这个问题

您需要使用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")
       }
     }
  })
}

您需要使用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")
       }
     }
  })
}

因此,我应该在那里写try{}而不是const email2吗?我不知道我应该在哪里写。如果你可以和我共享一个代码,那么我可以给你正确的代码。你需要替换下面的行:AsyncStorage.setItem('email',JSON.stringify(this.state.email1));使用AsyncStorage.setItem('email',this.state.email1);因此,我应该在那里写try{}而不是const email2吗?我不知道我应该在哪里写。如果你可以和我共享一个代码,那么我可以给你正确的代码。你需要替换下面的行:AsyncStorage.setItem('email',JSON.stringify(this.state.email1));使用AsyncStorage.setItem('email',this.state.email1);