实时数据库在 Android 上没有给我 push().key,在 iOS 上可以正常工作

Posted

技术标签:

【中文标题】实时数据库在 Android 上没有给我 push().key,在 iOS 上可以正常工作【英文标题】:Realtime database doesn't give me the push().key on Android, works fine on iOS 【发布时间】:2021-07-27 14:08:37 【问题描述】:

android 上,推送引用未定义,关键也是如此。在 ios 上运行良好。

我正在使用 react-native-firebase 11.0.0。

listKey 在第 4 行未定义。使用 push 命令将列表添加到数据库中,但由于我没有得到 listKey 的其余部分代码不起作用。如前所述,iOS 完全没有问题。从数据库中读取数据在 Android 上运行良好。

我试过了:

    将 react-native-firebase 更新到 11.4.1,没有变化 将 repo 下载到另一个文件夹并在没有 package-lock.json 的情况下执行 npm install(在 package.json 中修复了 11.0.0) const listPushRef = await listsRef.push( user: getUser(), name: listName ); 给出一个错误,它无法在未定义的情况下运行 .then()。

有什么想法吗?

代码:

export const addList = async (listName, freeCategory) => 
  const listsRef = database().ref(`lists`);
  const listPushRef = listsRef.push( user: getUser(), name: listName );
  const listKey = listPushRef.key;

  const usersListsRef = database().ref(`users/$getUser()/lists`);
  const usersLists = await usersListsRef.once('value').then(snapshot => snapshot.val() || []);
  usersLists.push(listKey);
  usersListsRef.set(usersLists);

  const userRef = database().ref(`users/$getUser()`);
  const user = await userRef.once('value').then(snapshot => snapshot.val());
  const listConfigurations = user.listConfigurations || ;
  listConfigurations[listKey] = [
    
      id: freeCategory,
      isCategory: true,
      compareTo: [],
    ,
  ];
  userRef.update( listConfigurations );

  return listKey;
;

【问题讨论】:

Pssst 应该等待吗?一些浏览器会很好地使用此规则,但如果它未定义,则可能没有返回承诺并且您跳过了它?其他浏览器对此表现正常吗? 尝试在 listsRef 上运行 console.log 并确定它是否在 android 中及时定义或尝试在它前面等待? :O 我已经尝试在它前面等待,我应该列出它。我收到“无法在未定义的情况下运行 .then()”或类似信息。当我 console.log listKey 它是未定义的,当我 console.log listPushRef 它是一个未解决的承诺。 是否定义了数据库?似乎这里没有承诺什么,到目前为止它可能不在这个函数中 列表被写入数据库,所以我认为它是。如果那里有问题,我可以检查一下。 【参考方案1】:

为了将来参考,我没有太多时间花在这上面,所以我不得不通过创建自己的密钥来解决这个问题。

所以我没有使用listPushRef.key,而是生成了一个UUID。不是最佳的,但它有效。

【讨论】:

以上是关于实时数据库在 Android 上没有给我 push().key,在 iOS 上可以正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中的相机捕获图像上设置实时帧

用于登录Android Studio的实时firebase数据库上的空指针异常[重复]

用于 Firebase 实时数据库/Firebase 身份验证的 Android 唯一密钥

如何在 Android 上接收实时 API 数据更新?

在没有 MediaPlayer 的情况下在 android 上播放实时媒体流

有没有办法用一行在同一个对象上调用多个函数?