Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio 如何在kotlin中初始化lateinit变量?_Android Studio_Kotlin_Retrofit - Fatal编程技术网

Android studio 如何在kotlin中初始化lateinit变量?

Android studio 如何在kotlin中初始化lateinit变量?,android-studio,kotlin,retrofit,Android Studio,Kotlin,Retrofit,我希望在此活动中从数据类cartDocs获取“id”。 我试图运行此代码,但出现如下错误: kotlin.UninitializedPropertyAccessException:lateinit属性购物车尚未初始化 我还尝试删除数据类中的“?”。但还是一样的问题。 我怎样才能解决这个问题 class CartViewActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener { lateinit va

我希望在此活动中从数据类cartDocs获取“id”。 我试图运行此代码,但出现如下错误: kotlin.UninitializedPropertyAccessException:lateinit属性购物车尚未初始化 我还尝试删除数据类中的“?”。但还是一样的问题。 我怎样才能解决这个问题

class CartViewActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener {




    lateinit var cart: cartDocs

    @RequiresApi(Build.VERSION_CODES.N)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_cart_view)

        val token = SharedPreference.getTokenInfo(this)

        Client.retrofitService.getCart(token).enqueue(object :Callback<CartResponse> {
            override fun onResponse(call: Call<CartResponse>, response: Response<CartResponse>) {
                swipeRefreshLo.setOnRefreshListener(this@CartViewActivity)
                showdata(response.body()?.docs!!)
                val itemId = cart.id
                if (itemId!=null){
                    SharedPreference.setCartId(applicationContext,itemId)
                }
            }

            override fun onFailure(call: Call<CartResponse>, t: Throwable) {

            }


        })
class CartViewActivity:AppCompatActivity(),SwipeRefreshLayout.OnRefreshListener{
lateinit var cart:cartDocs
@RequiresApi(Build.VERSION\u code.N)
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u cart\u视图)
val token=SharedReference.getTokenInfo(此)
Client.service.getCart(令牌).enqueue(对象:回调{
覆盖fun onResponse(调用:调用,响应:响应){
swipeRefreshLo.setOnRefreshListener(this@CartViewActivity)
showdata(response.body()?.docs!!)
val itemId=cart.id
if(itemId!=null){
setCartId(applicationContext,itemId)
}
}
覆盖失效时的乐趣(调用:调用,t:可丢弃){
}
})
数据类cartDocs

data class cartDocs(

    var id:String?=null,

    var title:String?=null,

    var stock:Int?=null,

    var availableAfter:String?=null,

    var price:Int?=null,

    var point:Int?=null,

    var mainImage:String?=null,

    var description:MutableList<cartDescription>,

    var amount:Int?=null,

    var added:String?=null,

    var options:MutableList<cartOptions>,

    var unitPrice:Int?=null,

    var unitPoint:Int?=null,

    var totalPrice:Int?=null,

    var totalPoint:Int?=null
)



数据类cartDocs(
变量id:字符串?=null,
变量标题:字符串?=null,
var股票:Int?=null,
var availableAfter:字符串?=null,
var价格:Int?=null,
变量点:Int?=null,
var mainImage:字符串?=null,
变量说明:可变列表,
变量金额:Int?=null,
添加的变量:字符串?=null,
变量选项:可变列表,
var单价:Int?=null,
变量单位点:Int?=null,
var totalPrice:Int?=null,
var totalPoint:Int?=null
)

lateinit
是为在对象创建后需要初始化变量的情况而设计的,例如像
dagger
这样的框架。事实上,它允许将
lateinit
变量用作正常的
非null
值(并去掉不必要的
?/!!
运算符)但是程序员有责任确保在使用之前初始化该值

在你的例子中,你试图在初始化变量之前使用它。因此,你得到了一个异常。你需要的是在某个时刻初始化该值。但是,我会考虑设计-似乎你需要的是一个
null
类型,在这里使用
lateinit
是不合理的。它会强制你检查值是否为空在使用该值之前不为null


如果您对JVM中的
lateinit
设计感兴趣,您可以看到我对其他问题的旧答案:

它是未初始化的
cart
。可空类型(
)不会生成此错误。那么如何通过分配给它来初始化cart呢。
cart=cartDocs()
@RequiresApi(Build.VERSION\u CODES.N)
应该已经引起怀疑了。。。