0
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变量没有初始化。。该怎么修改呢?

2个回答

0

主要原因还是因为我的线程内进行了ui操作,同时还在主线程,好了,问题结束

0

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中也基本适用,建议你去看看

撰写答案