Проблема с запросом 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. Проблема в запросе из базы не заполняет массив. Прошу помочь, неделю не могу продвинуться с мертвой точки.