【问题标题】:Firebase handle sudden loss in connectionFirebase 处理连接突然丢失
【发布时间】:2018-04-29 09:46:44
【问题描述】:

我想知道当互联网连接突然中断时如何控制我的 firebase 写入请求。为了解释我的问题,我将举这个例子:

示例

假设我一次写 3 次:

1) WRITE 1 : 表示将图片上传到 Firebase 存储。

2) WRITE 2 :表示将另一张图片上传到 Firebase 存储。

3) WRITE 3:表示将(WRITE 1)和(WRITE 2)的url链接存入实时数据库。

一次执行 3 次写入的合理方法是根据每个的完整侦听器链接它们

类似这样的:

 //WRITE 1 

 storageref.putfile(image1).addOnCompleteListener(new OnCompleteListener{

     //get link of this write and do WRITE 2 

      //WRITE 2 

       storage ref.putfile(image2).addOnCompleteListener(new OnCompleteListener{

          //get the link of this write and do WRITE 3

         // WRITE 3 
           Map links=new HashMap();
           links.put("image1", link1);
           links.put("image2", link2);  
           databaseref.child("images").setValue(links).addOnCompleteListener(new OnCompleteListener{

             //show a message

        });

  });
  });

如您所见,实现此目的的唯一方法是将它们链接在一起,以便在一个写入完成时执行另一个写入,依此类推。

问题

案例 1:如果 WRITE 1 连接丢失,则其他写入将无法完成。

案例 2:如果在 WRITE 2 时连接丢失,那么最后一次写入将不会执行,我最终会在存储中得到无用的文件。因为我无法将它们发送到数据库。

案例 3:如果在 WRITE 3 上连接丢失,那么我将无法显示消息。

问题

看来这是解决这个问题的唯一方法。您能否提供解决此问题的方法或解决方案,我不希望由于数据库结构不完整而导致我的应用程序崩溃。

【问题讨论】:

    标签: android firebase firebase-realtime-database database-connection firebase-storage


    【解决方案1】:

    在没有交易的情况下,您需要做一些事情来确保您的应用在不可靠的条件下运行。

    1. 按照最容易防止或检测故障的顺序写入数据。您首先编写文件,然后才更新数据库。由于您可能会触发数据库记录上的其他进程,因此在第 3 步完成之前不会触发它们。所以你已经在这样做了。

    2. 编写您的阅读代码,以应对可能的不完整数据。例如:不要假设文件是​​正确的,甚至是存在的,即使 URL 已进入数据库。当您在单独的读取操作中从数据库中读取多个节点时,请按照最容易检测到不完整或损坏的数据并在这种情况下跳过该项目的顺序读取它们。

    3. 运行常规批处理以清理孤立数据。我承认这通常是不值得的,但保持数据尽可能正确是一个良好的卫生问题。

    【讨论】:

    • 所以数据被破坏的不确定性总是意料之中的?并且没有可能的方法来阻止写入过程完成?我的意思是,在某个存储引用上调用 put 文件时,它永远无法停止?
    • 可以取消正在进行的文件上传。见firebase.google.com/docs/storage/android/…
    • 这适用于数据库写入吗?
    • 我不想在这里跑题,但我必须说,对于 firebase 中的每次写入,无论是文件上传还是数据库写入 ....Oncomplete 总是等待的,而 Onfailure 永远不会被触发。
    • 我的意思是如果我的数据永远不会到达数据库 ---> 那么 OnComplete 永远不会触发 ------> 并且失败也不会触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 2019-02-20
    • 2020-04-05
    • 2020-10-26
    • 2013-09-02
    • 2015-01-14
    相关资源
    最近更新 更多