鍍金池/ 問答/Android  網(wǎng)絡(luò)安全/ kotlin_android網(wǎng)絡(luò)請求線程發(fā)生的一個小錯誤,歡迎指點

kotlin_android網(wǎng)絡(luò)請求線程發(fā)生的一個小錯誤,歡迎指點

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)

總結(jié)這個錯誤就是說我的MyJson變量沒有初始化。。該怎么修改呢?

回答
編輯回答
櫻花霓

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property Myjson has not been initialized

這個意思大概是使用了lateinit修飾的屬性在使用前必須初始化

你如果不能保證在使用前初始化,那么建議使用 var Myjson:container? = null的方式來使用
在后面使用的時候應(yīng)該用container?.foo()的方式來調(diào)用方法


也許不應(yīng)該說,但是你的變量命名規(guī)則太不符合規(guī)范了
類名大寫開頭,變量小寫開頭,除常量外不用下劃線,采用駝峰命名

這個可以說是基本約定的規(guī)范

https://www.cnblogs.com/han-1...
阿里的java編程規(guī)范,在kotlin中也基本適用,建議你去看看

2017年3月3日 10:09
編輯回答
檸檬藍(lán)

主要原因還是因為我的線程內(nèi)進(jìn)行了ui操作,同時還在主線程,好了,問題結(jié)束

2018年6月14日 05:34