Проблема с запросом Room. База не инициализируется с первого раза и запрос не работает

При нажатии на кнопку открывается Dialog

BtnUploadRW = findViewById(R.id.BtnUploadRW)
        BtnUploadRW.setOnClickListener {
            openUploadDock()
        }

Функция openUploadDock()

fun openUploadDock() {
        val dialogBinding = layoutInflater.inflate(R.layout.activity_dock_select,null)
        val myDialog = Dialog(this@DockRW)
        myDialog.setContentView(dialogBinding)
        myDialog.setCancelable(true)
        myDialog.show()
        val viewModel = ViewModelProvider(this)[DockRWViewModel::class.java]
        viewModel.initDatabase()
        val recyclerView3 = dialogBinding.findViewById<RecyclerView>(R.id.tabsRV)
        adapter3 = DockSelectAdapter(this@DockRW)
        recyclerView3.layoutManager= LinearLayoutManager(this@DockRW)
        viewModel.getAllDockRws().observe(this) { listDockrw ->
            adapter3.setList(listDockrw)
        }
        val yesbtn = dialogBinding.findViewById<Button>(R.id.btnUpLoadDock)
        yesbtn.setOnClickListener {
            val viewModel2 = ViewModelProvider(this)[DockRWViewModel::class.java]
            viewModel2.initDatabase()
            val sb = StringBuilder()
            var n =  0
            while (n < adapter3.checkedList.size) {
                path = ""
                fileName = ""
                val docknum = adapter3.checkedList[n].dokNum
                sb.append(docknum.trim())
                if (n !=adapter3.checkedList.size - 1){
                    sb.append("\n")
                }
                Log.e("docknum",docknum.trim())
                scanList.removeAll(scanList.toSet())
                viewModel2.getAllScansByDockNum(dockNum = adapter3.checkedList[n].dokNum).observe(this,{listScansByDockNum ->
                    scanList.clear()
                    scanList.addAll(listScansByDockNum)
                })
                createXlFile(scanList,docknum.trim())
                Log.e("file+ path", "$path $fileName")
                uploadToFTP(path,fileName)
                n++
            }
            if (adapter3.checkedList.size > 0){
                Toast.makeText(this@DockRW, sb.toString(),Toast.LENGTH_SHORT).show() }
            else{
                Toast.makeText(this@DockRW,"Пожалуйста, выберите хотя бы один документ!",Toast.LENGTH_SHORT).show()
            }

        }
        recyclerView3.adapter = adapter3
//        val noBtn = dialogBinding.findViewById<Button>(R.id.closeBtn_dock)
//        noBtn.setOnClickListener {
//            myDialog.dismiss()
//        }
    }

Функция uploadToFTP()

fun uploadToFTP(path2: String, fileName2: String){
        GlobalScope.async(Dispatchers.IO) {
            val con = FTPClient()
            con.connectTimeout = 300
            try {
                con.connect("89.218.185.6", 21)
                if (FTPReply.isPositiveCompletion(con.replyCode)) {
                    Log.e("FTP", "Connect OKEY!")
                } else {
                    Log.e("FTP", "Connect NOT OKEY!")
                }
            } catch (e: Exception) {
                Log.e("FTP", e.toString())
            }
            con.enterLocalPassiveMode()
            try{
                if (con.login("pgsquad", "zakaza")) {
                    con.setFileType(FTP.BINARY_FILE_TYPE)
                    val file1 = File(path2)
                    val msg_bytes = FileInputStream(file1)
                    val result: Boolean = con.storeFile(fileName2, msg_bytes)
                    msg_bytes.close()
                    if (result) Log.v("upload result", "succeeded")
                    con.logout()
                    con.disconnect()

                    val result2 = file1.delete()
                    if (result2) {
                        println("Deletion succeeded.")
                    } else {
                        println("Deletion failed.")
                    }
                    //scanList.clear()

                }
            }
            catch (ex: IOException) {
                ex.printStackTrace()
            }
        }
    }

Функция createXlFile()

private fun createXlFile(scanList2: ArrayList<ScanModel>, dockNum: String) {
        val wb: Workbook = HSSFWorkbook()
        var cell: Cell
        val sheet: Sheet = wb.createSheet("Название документа")
        //Now column and row
        val row = sheet.createRow(0)
        cell = row.createCell(0)
        cell.setCellValue("Штрих код")
        cell = row.createCell(1)
        cell.setCellValue("Количество")
        //column width
        sheet.setColumnWidth(0, 20 * 200)
        sheet.setColumnWidth(1, 30 * 200)
        for (i in scanList2.indices) {
            val row1 = sheet.createRow(i + 1)
            cell = row1.createCell(0)
            cell.setCellValue(scanList2[i].shCode.toString())
            cell = row1.createCell(1)
            cell.setCellValue(scanList2[i].countNo.toString())
            sheet.setColumnWidth(0, 20 * 200)
            sheet.setColumnWidth(1, 30 * 200)
        }

        val folderName = "Import Excel"
        fileName = folderName+ dockNum  + System.currentTimeMillis() + ".xls"
        path = Environment.getExternalStorageDirectory()
            .toString() + File.separator + folderName + File.separator + fileName
        val file =
            File(Environment.getExternalStorageDirectory().toString() + File.separator + folderName)
        if (!file.exists()) {
            file.mkdirs()
        }
        var outputStream: FileOutputStream? = null
        try {
            outputStream = FileOutputStream(path)
            wb.write(outputStream)
//            uploadToFTP(path,fileName)
            Toast.makeText(applicationContext, "Excel Created in $path", Toast.LENGTH_SHORT).show()
        } catch (e: IOException) {
            e.printStackTrace()
            Toast.makeText(applicationContext, "Not OK $path", Toast.LENGTH_LONG).show()
            try {
                outputStream!!.close()
            } catch (ex: Exception) {
                ex.printStackTrace()
            }
        }
    }

При открытии Dialog, пользователь мог выбрать документ через CheckBox и при нажатии на кнопку в Dialog-е можно было что бы из базы по название документа вытаскивал данные и загружал в массив. После массив загружает данные в Excel файл и отправлял на FTP Сервер. Отправка на FTP и создание Excel файла работает. CheckBox выделяет и вытягивает данные нормально, проверяю через StringBuilder. Проблема в запросе из базы не заполняет массив. Прошу помочь, неделю не могу продвинуться с мертвой точки.


Ответы (0 шт):