kotlin_android网络请求线程发生的一个小错误,欢迎指点
MyThread.kt
class Article_thread:AsyncTask<String,Int,String>(){
lateinit var Myjson:container
override fun doInBackground(vararg p0: String?): String {
var MyUrl=p0[0]!!.toString()
var html=article_list_get(MyUrl)
var gson= Gson()
var Myjson=gson.fromJson(html, container::class.java)
this.Myjson=Myjson
return "finish"
}
fun article_list_get(MyUrl:String):String{
try{
val html:String= URL(MyUrl).readText()
return html
}
catch (e:Exception){
Log.v("error",e.toString())
}
return """null"""
fun get_title(position: Int): String {
var title=this.Myjson.result[position].article.title
return title
}
fun get_id(position: Int):String{
var id=this.Myjson.result[position].article.id
return id
}
fun setJson(json:container){
this.Myjson=json
}
}
data class container(val result:List<single>){}
data class single(val article:MyList){}
data class MyList(val title:String,val id:String){}
MainActivity.kt
fun tab_init(){
var mTab=findViewById<TabLayout>(R.id.mTablayout)
for(i in 0..20){
var n=mTab.newTab()
n.setText(i.toString())
mTab.addTab(n,i)
}
mTab.tabMode=TabLayout.MODE_SCROLLABLE
}
BUG/控制台错误
FATAL EXCEPTION: main Process: com.example.frank.myapplication, PID: 10744
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.frank.myapplication/com.example.frank.myapplication.article.activity_article}: kotlin.UninitializedPropertyAccessException: lateinit property Myjson has not been initialized
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3046)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6809)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property Myjson has not been initialized
at com.example.frank.myapplication.PrivateThread.Article_thread.getMyjson(Article_thread.kt:16)
总结这个错误就是说我的MyJson变量没有初始化。。该怎么修改呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
主要原因还是因为我的线程内进行了ui操作,同时还在主线程,好了,问题结束
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property Myjson has not been initialized
这个意思大概是使用了lateinit修饰的属性在使用前必须初始化
你如果不能保证在使用前初始化,那么建议使用
var Myjson:container? = null
的方式来使用在后面使用的时候应该用container?.foo()的方式来调用方法
也许不应该说,但是你的变量命名规则太不符合规范了
类名大写开头,变量小写开头,除常量外不用下划线,采用驼峰命名
这个可以说是基本约定的规范
https://www.cnblogs.com/han-1...
阿里的java编程规范,在kotlin中也基本适用,建议你去看看