【问题标题】:Passing data between screens with AsyncStorage使用 AsyncStorage 在屏幕之间传递数据
【发布时间】:2019-02-23 11:08:26
【问题描述】:

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

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

我该如何解决?还有其他简单的方法可以解决吗?

截图:Messages.js:

firebaseChatModule.js:

更新:

好的,现在可以了,感谢 Nirmalsinh 的回答,但现在我在服务器上遇到以下问题:

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

我该如何解决这个问题?

【问题讨论】:

    标签: firebase react-native firebase-realtime-database asyncstorage


    【解决方案1】:

    你需要使用 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)); with AsyncStorage.setItem('email', this.state.email1);
    猜你喜欢
    • 2019-11-01
    • 2020-10-10
    • 2021-03-01
    • 2018-01-10
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多