Приведенный ниже класс принимает список данных из 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()
}
}
}