kotlin - kotlin.UninitializedPropertyAccessException:lateinit 属性 salesGST 模型类尚未安装
问题描述
使用 Retrofit2 和 rxjav2 解析 Json 数据。然后它给出了 salesGST 的 lateinit 属性的错误:
“kotlin.UninitializedPropertyAccessException:lateinit 属性 salesGST 尚未初始化”
在 ArrayList 中的 SalesGST 数据之后,JSONObject 中的模型类 SalesGSTList 键成功。
class SalesGSTList {
val success : String = ""
lateinit var salesGST: ArrayList<SalesGST>
}
在 SalesGST 中声明 JSON 密钥。
class SalesGST {
var FYearID : Int = 0
var Cmp_Name : String? = ""
var GSTIN : String? = ""
var FirmName : String? = ""
}
解析 Json 数据在 Textview 和 TableLayout 中显示。当数据订阅然后给出错误。
销售.kt
class Sales : AppCompatActivity() {
internal lateinit var api : APIInterface
private var compositeDisposable : CompositeDisposable? = null
private var salesGST : SalesGST? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sales)
compositeDisposable = CompositeDisposable()
fetchYearData()
}
private fun fetchYearData(){
val retrofit = APIClient.apIClient
if (retrofit != null) {
api = retrofit.create(APIInterface::class.java)
}
/*compositeDisposable!!.add(api.getSalesGSTData(cid,fid,fDate,tDate)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe { displaySalesGSTData(it.salesGST) })*/
compositeDisposable!!.add(api.getSalesGSTData(1,1,"04/01/2018","31/03/2019")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe( {
displaySalesGSTData(it.salesGST) },
{
Toast.makeText(this,it.message,Toast.LENGTH_LONG).show()
}))
}
private fun displaySalesGSTData(salesGSt : List<SalesGST>) {
salesGST = SalesGST()
tvSalesCompanyName.setText(salesGST!!.Cmp_Name)
tvGSTIN.setText(salesGST!!.GSTIN)
val rowHeader = TableRow(this@Sales)
rowHeader.setBackgroundColor(Color.parseColor("#c0c0c0"))
rowHeader.setLayoutParams(TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT))
val headerText = arrayOf<String>("Sr.No.", "Invoice Type", "Bill No.", "Bill Date", "Firm Name", "GST NO","TAX Total","CGST","SGST","IGST","Net Amount")
for (c in headerText)
{
val tv = TextView(this@Sales)
tv.setLayoutParams(TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT))
tv.setGravity(Gravity.CENTER)
// tv.setBackgroundResource(R.drawable.table_header)
tv.setTextColor(Color.parseColor("#3F51B5"))
tv.setTextSize(18F)
tv.setPadding(5, 5, 5, 5)
tv.setText(c)
rowHeader.addView(tv)
}
tableMarks.addView(rowHeader)
for (j in 0 until salesGSt.size)
{
var fName : String = salesGSt[j].FirmName!!
var invoice : String = salesGSt[j].InvoiceType!!
var bill_no : String = salesGSt[j].ChallanNo!!
var bill_date : String = salesGSt[j].ChallanDate!!
var gst_no : String = salesGSt[j].PartyGST!!
var tax_total : String = salesGSt[j].TaxTotal!!
var cgst : String = salesGSt[j].CGSTTotal!!
var igst : String = salesGSt[j].IGSTTotal!!
var sgst : String = salesGSt[j].SGSTTotal!!
var net_amount : String = salesGSt[j].ChallanAmount!!
var sr : Int = j
// dara rows
val row = TableRow(this@Sales)
row.setLayoutParams(TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.WRAP_CONTENT))
val colText = arrayOf<String>(sr.toString(),(invoice), bill_no, bill_date, fName, gst_no,tax_total,cgst,sgst,igst,net_amount)
for (text in colText)
{
val tv = TextView(this@Sales)
tv.setLayoutParams(TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT))
tv.setGravity(Gravity.CENTER)
// tv.setBackgroundResource(R.drawable.table_shape)
tv.setTextSize(18F)
tv.setTextColor(Color.parseColor("#000000"))
tv.setPadding(5, 5, 5, 5)
tv.setText(text)
row.addView(tv)
}
tableMarks.addView(row)
}
}
}
界面
@GET("SalesGST.php")
fun getSalesGSTData(@Query("cid") cid : Int,@Query("fid") fid : Int,@Query("fd") fd : String,@Query("td") td : String) : Observable<SalesGSTList>
解决方案
这个错误非常清楚。您尝试在初始化之前使用变量 salesGST。
我想这来自这里:
class SalesGSTList {
val success : String = ""
// salesGST expects to be initialize soon and is never initialized
lateinit var salesGST: ArrayList<SalesGST>
}
您应该对 salesGST 进行延迟初始化,或者将其设置为:
var salesGST: ArrayList<SalesGST>? = null
推荐阅读
- pine-script - 如何隐藏 RSI 条上的彩色零
- python - 我认为为什么会出现这种词性错误,我该如何解决
- ios - 给定一个自定义形状,如何增加尺寸以适应 SwiftUI 中的框架?
- python - 如何使用python在默认程序中打开多个文件
- javascript - 如何使用 Cognito 在 AWS Amplify Vuejs 应用程序中检查当前用户并加载用户数据
- java - 如何反转一个整数?
- javascript - 检查或统计所选文件少于 2 个
- javascript - ChartJs:如何在自动跳过设置为 true 时强制显示标签
- javascript - 在使用 tablesorter 排序的表中使用输入元素时,如何使用 inputmask 获取输入元素以不将更改恢复为先前的值?
- vue.js - 从 algolia 索引中检索属性中点注释的深度键列表,以在 vue 即时搜索中制作细化列表