как решить эту проблему с классом android, экспортирующим данные в таблицу Excel? - PullRequest
0 голосов
/ 04 августа 2020

Приведенный ниже класс принимает список данных из Firebase Firestore, затем я передаю одни из этих данных другой функции, чтобы получить данные из Firestore.

Проблема в том, что после создания листа данные из списка появляются на листе, но данные из gettingData() появляются с инициализирующими значениями. Я имею в виду, что siteName отображается на листе как «Имя», а не как значение из базы данных.

class SaveSitesToExcel {

    val dataStore by lazy {
        FirebaseFirestore.getInstance()
    }
    var siteArea = "Area"
    var siteName  = "Name"
    var siteArabicName  = "Arabic Name"
    var siteOffice = "Office"
    var siteRegion = "Region"

    fun saveExcelFile(List : List<Sites>, context: Context, fileName: String) {

        // check if available and not read only

        //New Workbook
        val wb = HSSFWorkbook()
        lateinit var c: Cell

        //Cell style for header row
        val cs = wb.createCellStyle()
        cs.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index)
        cs.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND)

        val cs1 = wb.createCellStyle()
        cs1.setFillForegroundColor(HSSFColor.BLUE.index)
        cs1.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND)

        val cs2 = wb.createCellStyle()
        cs2.setFillForegroundColor(HSSFColor.WHITE.index)
        cs2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND)

        //New Sheet
        lateinit var sheet1: Sheet
        sheet1 = wb.createSheet("Sites")

        val row  = sheet1.createRow(0)
        c = row.createCell(0)
        c.setCellValue("Area")
        c.setCellStyle(cs)
        c = row.createCell(1)
        c.setCellValue("Site Code")
        c.setCellStyle(cs)
        c = row.createCell(2)
        c.setCellValue("Site Name")
        c.setCellStyle(cs)
        c = row.createCell(3)
        c.setCellValue("Arabic Name")
        c.setCellStyle(cs)
        c = row.createCell(4)
        c.setCellValue("Region")
        c.setCellStyle(cs)
        c = row.createCell(5)
        c.setCellValue("Office")
        c.setCellStyle(cs)
        c = row.createCell(6)
        c.setCellValue("Date")
        c.setCellStyle(cs1)
        c = row.createCell(7)
        c.setCellValue("Guard Quantity")
        c.setCellStyle(cs1)
        c = row.createCell(8)
        c.setCellValue("Quantity Before")
        c.setCellStyle(cs1)
        c = row.createCell(9)
        c.setCellValue("Quantity Added")
        c.setCellStyle(cs1)
        c = row.createCell(10)
        c.setCellValue("Total")
        c.setCellStyle(cs1)
        sheet1.setColumnWidth(0, 15 * 500)
        sheet1.setColumnWidth(1, 15 * 500)
        sheet1.setColumnWidth(2, 15 * 500)
        sheet1.setColumnWidth(3, 15 * 500)
        sheet1.setColumnWidth(4, 15 * 500)
        sheet1.setColumnWidth(5, 15 * 500)


        for (n in 1 until List.size+1){

            gettingSiteData(List[n-1].siteCode)

            val row  = sheet1.createRow(n)
            c = row.createCell(0)
            c.setCellValue(siteArea)
            c.setCellStyle(cs2)
            c = row.createCell(1)
            c.setCellValue(List[n-1].siteCode)
            c.setCellStyle(cs2)
            c = row.createCell(2)
            c.setCellValue(siteName)
            c.setCellStyle(cs2)
            c = row.createCell(3)
            c.setCellValue(siteArabicName)
            c.setCellStyle(cs2)
            c = row.createCell(4)
            c.setCellValue(siteRegion)
            c.setCellStyle(cs2)
            c = row.createCell(5)
            c.setCellValue(siteOffice)
            c.setCellStyle(cs2)
            c = row.createCell(6)
            c.setCellValue(List[n-1].visitDate)
            c.setCellStyle(cs2)
            c = row.createCell(7)
            c.setCellValue(List[n-1].guardQty)
            c.setCellStyle(cs2)
            c = row.createCell(8)
            c.setCellValue(List[n-1].qtyBefore)
            c.setCellStyle(cs2)
            c = row.createCell(9)
            c.setCellValue(List[n-1].qtyAdded)
            c.setCellStyle(cs2)
            c = row.createCell(10)
            c.setCellValue(List[n-1].qtyAfter)
            c.setCellStyle(cs2)
            sheet1.setColumnWidth(0, 15 * 500)
            sheet1.setColumnWidth(1, 15 * 500)
            sheet1.setColumnWidth(2, 15 * 500)
            sheet1.setColumnWidth(3, 15 * 500)
            sheet1.setColumnWidth(4, 15 * 500)
            sheet1.setColumnWidth(5, 15 * 500)
            sheet1.setColumnWidth(6, 15 * 500)
            sheet1.setColumnWidth(7, 15 * 500)
            sheet1.setColumnWidth(8, 15 * 500)
            sheet1.setColumnWidth(9, 15 * 500)
            sheet1.setColumnWidth(10, 15 * 500)
            Toast.makeText(context,siteArabicName,Toast.LENGTH_SHORT).show()
        }

        // Create a path where we will place our List of objects on external storage
        val file = File(context.getExternalFilesDir(null), fileName)
        var os = FileOutputStream(file)
        wb.write(os)
        os.close()
        alertDialog("Saved",R.drawable.ic_done,context).createDialog()
    }

    fun gettingSiteData(siteCode : String){
                dataStore.collection("Sites").document(siteCode).get()
                 .addOnSuccessListener {
                var site = it.toObject(SiteData::class.java)
                siteArea = site?.area.toString()
                siteName = site?.siteStandardName.toString()
                siteArabicName = site?.siteArabicName.toString()
                siteOffice = site?.Office.toString()
                siteRegion = site?.Region.toString()
            }
    }
} 

...