FTP 传输期间 Kotlin Wi-Fi 丢失/信号不好

问题描述

我几乎完成了一个应用程序,该应用程序将包含扫描数据的 txt 文件发送到 ftp 服务器。
我目前遇到的问题是:如果我的 Wi-Fi 信号很差或根本没有信号怎么办。

我注意到我的“isOnline()”检查工作正常,如果没有互联网,它会提醒用户。然而,几个小时前,我在地下室测试了该应用程序,并注意到当 Wi-Fi 信号没有条时,它仍然会发送数据,但它在途中的某个地方丢失了。 目前数据流向如下:

  1. 用户按下“发送”
  2. 检查互联网,如果是,请继续
  3. 清除内容列表并发送 视图模型的内容
  4. viewmodel 之前再次检查互联网 创建txt文件
  5. txt 文件通过下面的 FTP 代码发送。
    private fun sendTXT(result: String) {
        try {
            val name = "00_VER${LocalDateTime.Now().format(fileNameFormatter)}.txt"
            val path = getApplication<Application>().applicationContext.filesDir.path
                .toString() + name
            val f = File(path)
            val isNewFileCreated: Boolean = f.createNewFile()
            if (isNewFileCreated) {
                f.writeText(result,Charsets.UTF_8)
            }

            val ftpClient = FTPClient()
            ftpClient.addProtocolCommandListener(PrintCommandListener(PrintWriter(System.out)))
            ftpClient.connect("xxx.xx.xxx.xx",21)
            val reply: Int = ftpClient.replyCode
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect()
                throw IOException("Exception in connecting to FTP Server")
            }
           
            if (ftpClient.login("username","pass")) {
                ftpClient.enterLocalPassiveMode()
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE)
                val inp = FileInputStream(f)
                var directory = "/files/input"
                ftpClient.changeWorkingDirectory(directory)
                val result = ftpClient.storeFile(name,inp)
                inp.close()
                if (result) {
                    ftpClient.logout()
                    ftpClient.disconnect()
                    f.delete()
                }

            }
        } catch (e: Exception) {
            e.printstacktrace()
        }
    }
    fun isOnline(context: Context): Boolean {
        var result = false
        val connectivityManager =
            context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val networkCapabilities = connectivityManager.activeNetwork ?: return false
            val actNw =
                connectivityManager.getNetworkCapabilities(networkCapabilities) ?: return false
            result = when {
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
                actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
                else -> false
            }
        } else {
            connectivityManager.run {
                connectivityManager.activeNetworkInfo?.run {
                    result = when (type) {
                        ConnectivityManager.TYPE_WIFI -> true
                        ConnectivityManager.TYPE_MOBILE -> true
                        ConnectivityManager.TYPE_ETHERNET -> true
                        else -> false
                    }

                }
            }
        }

        return result

    }

我一直在寻找一种方法来确保数据到达服务器。有没有更高级的方法来检查互联网连接? 我正在考虑将所有扫描对象作为 JSON 添加到共享首选项中,如果在一天结束时用户注意到扫描没有通过,他们可以查找丢失的扫描并重新发送它。 然而,这似乎非常不合常规,我很确定一定有更好的方法来处理事情。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)