从数组列表中获取数据时,lateinit 属性 尚未初始化
lateinit property has not been initialized when get data from array list
我想使用改造
从API获得的数组列表数据中获取第一个索引
c
lass BeritaActivity : AppCompatActivity() {
var listData : ArrayList<Berita> = ArrayList()
lateinit var adapter: BeritaAdapter
lateinit var image_headline: String
lateinit var judul_headline: String
companion object {
const val JUDUL = "judul"
const val BERITA = "berita"
const val IMAGE = "image"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_berita)
recycler_berita.setHasFixedSize(true)
recycler_berita.layoutManager = LinearLayoutManager(applicationContext)
ApiService.create()
.getBerita()
.enqueue(object : retrofit2.Callback<List<Berita>>{
override fun onFailure(call: Call<List<Berita>>, t: Throwable) {
toast(t.message.toString())
}
override fun onResponse(
call: Call<List<Berita>>,
response: Response<List<Berita>>
) {
listData.addAll(response.body() as ArrayList<Berita>)
judul_headline = listData[0].namaKegiatan.toString()
image_headline = listData[0].foto.toString()
Log.d("Headline Judul",judul_headline)
Log.d("Headline Photo",image_headline)
adapter = BeritaAdapter(listData, this@BeritaActivity){
startActivity<DetailBeritaActivity>(
JUDUL to it.namaKegiatan,
BERITA to it.deskripsiKegiatan,
IMAGE to it.foto
)
}
recycler_berita.adapter = adapter
}
})
judul_headline_berita.text = judul_headline
Glide.with(this)
.load("https://tahfidzta.doaqu.or.id/kegiatan/"+image_headline)
.into(image_headline_berita)
}
}
遇到这个错误
2020-05-21 21:10:31.309 1726-1726/com.thor.prototype E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.thor.prototype, PID: 1726
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thor.prototype/com.thor.doaqu.BeritaActivity}: kotlin.UninitializedPropertyAccessException: lateinit property judul_headline has not been initialized
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property judul_headline has not been initialized
at com.thor.doaqu.BeritaActivity.onCreate(BeritaActivity.kt:74)
at android.app.Activity.performCreate(Activity.java:7224)
at android.app.Activity.performCreate(Activity.java:7213)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
我不知道有什么问题,请帮助我
谢谢
您应该在 onCreate
函数中或使用 lazy
初始化 lateinit
变量。看这里:
您可以轻松使用而不是
lateinit var image_headline: String
lateinit var judul_headline: String
这行
var image_headline=""
var judul_headline=""
这是因为 enqueue()
异步工作。这意味着这段代码
judul_headline_berita.text = judul_headline
Glide.with(this)
.load("https://tahfidzta.doaqu.or.id/kegiatan/"+image_headline)
.into(image_headline_berita)
将首先执行,此处 image_headline
未初始化。
所以解决方案是:
override fun onResponse(
call: Call<List<Berita>>,
response: Response<List<Berita>>
) {
listData.addAll(response.body() as ArrayList<Berita>)
judul_headline = listData[0].namaKegiatan.toString()
image_headline = listData[0].foto.toString()
Log.d("Headline Judul",judul_headline)
Log.d("Headline Photo",image_headline)
adapter = BeritaAdapter(listData, this@BeritaActivity){
startActivity<DetailBeritaActivity>(
JUDUL to it.namaKegiatan,
BERITA to it.deskripsiKegiatan,
IMAGE to it.foto
)
}
recycler_berita.adapter = adapter
judul_headline_berita.text = judul_headline
Glide.with(this)
.load("https://tahfidzta.doaqu.or.id/kegiatan/"+image_headline)
.into(image_headline_berita)
}
我想使用改造
从API获得的数组列表数据中获取第一个索引c
lass BeritaActivity : AppCompatActivity() {
var listData : ArrayList<Berita> = ArrayList()
lateinit var adapter: BeritaAdapter
lateinit var image_headline: String
lateinit var judul_headline: String
companion object {
const val JUDUL = "judul"
const val BERITA = "berita"
const val IMAGE = "image"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_berita)
recycler_berita.setHasFixedSize(true)
recycler_berita.layoutManager = LinearLayoutManager(applicationContext)
ApiService.create()
.getBerita()
.enqueue(object : retrofit2.Callback<List<Berita>>{
override fun onFailure(call: Call<List<Berita>>, t: Throwable) {
toast(t.message.toString())
}
override fun onResponse(
call: Call<List<Berita>>,
response: Response<List<Berita>>
) {
listData.addAll(response.body() as ArrayList<Berita>)
judul_headline = listData[0].namaKegiatan.toString()
image_headline = listData[0].foto.toString()
Log.d("Headline Judul",judul_headline)
Log.d("Headline Photo",image_headline)
adapter = BeritaAdapter(listData, this@BeritaActivity){
startActivity<DetailBeritaActivity>(
JUDUL to it.namaKegiatan,
BERITA to it.deskripsiKegiatan,
IMAGE to it.foto
)
}
recycler_berita.adapter = adapter
}
})
judul_headline_berita.text = judul_headline
Glide.with(this)
.load("https://tahfidzta.doaqu.or.id/kegiatan/"+image_headline)
.into(image_headline_berita)
}
}
遇到这个错误
2020-05-21 21:10:31.309 1726-1726/com.thor.prototype E/AndroidRuntime: FATAL EXCEPTION: main Process: com.thor.prototype, PID: 1726 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thor.prototype/com.thor.doaqu.BeritaActivity}: kotlin.UninitializedPropertyAccessException: lateinit property judul_headline has not been initialized at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6810) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873) Caused by: kotlin.UninitializedPropertyAccessException: lateinit property judul_headline has not been initialized at com.thor.doaqu.BeritaActivity.onCreate(BeritaActivity.kt:74) at android.app.Activity.performCreate(Activity.java:7224) at android.app.Activity.performCreate(Activity.java:7213) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:201) at android.app.ActivityThread.main(ActivityThread.java:6810) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
我不知道有什么问题,请帮助我 谢谢
您应该在 onCreate
函数中或使用 lazy
初始化 lateinit
变量。看这里:
您可以轻松使用而不是
lateinit var image_headline: String
lateinit var judul_headline: String
这行
var image_headline=""
var judul_headline=""
这是因为 enqueue()
异步工作。这意味着这段代码
judul_headline_berita.text = judul_headline
Glide.with(this)
.load("https://tahfidzta.doaqu.or.id/kegiatan/"+image_headline)
.into(image_headline_berita)
将首先执行,此处 image_headline
未初始化。
所以解决方案是:
override fun onResponse(
call: Call<List<Berita>>,
response: Response<List<Berita>>
) {
listData.addAll(response.body() as ArrayList<Berita>)
judul_headline = listData[0].namaKegiatan.toString()
image_headline = listData[0].foto.toString()
Log.d("Headline Judul",judul_headline)
Log.d("Headline Photo",image_headline)
adapter = BeritaAdapter(listData, this@BeritaActivity){
startActivity<DetailBeritaActivity>(
JUDUL to it.namaKegiatan,
BERITA to it.deskripsiKegiatan,
IMAGE to it.foto
)
}
recycler_berita.adapter = adapter
judul_headline_berita.text = judul_headline
Glide.with(this)
.load("https://tahfidzta.doaqu.or.id/kegiatan/"+image_headline)
.into(image_headline_berita)
}