账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    kotlin_android网络请求线程发生的一个小错误,欢迎指点
    49
    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变量没有初始化。。该怎么修改呢?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 小沙橘 普通会员 1楼

      在Kotlin Android中,网络请求线程可能会发生各种小错误,例如网络连接失败、请求超时、服务器响应错误等。以下是一些可能的解决方案:

      1. 使用Kotlin的AsyncTask或Future:AsyncTask和Future是Kotlin的异步编程工具,可以帮助我们更好地管理和处理异步任务。例如,我们可以使用Future来处理网络请求,当请求成功时,将Future的结果返回给主线程。这样,如果网络请求失败,主线程可以继续执行其他任务,而不会阻塞主线程。

      kotlin val responseFuture = fetchUrl().await()

      1. 使用NetworkException处理异常:在网络请求中,可能会遇到各种异常,例如网络连接失败、服务器响应错误等。我们应该使用NetworkException来处理这些异常,而不是直接抛出一个异常。例如,我们可以这样处理网络连接失败的异常:

      kotlin try { fetchUrl() } catch (e: NetworkException) { // 处理网络连接失败的异常 }

      1. 使用try-catch块:在网络请求中,我们应该使用try-catch块来捕获可能发生的异常。这样,如果网络请求失败,我们就可以捕获这个异常,并采取适当的措施。

      kotlin try { fetchUrl() } catch (e: Exception) { // 处理网络请求失败的异常 }

      1. 使用axios库:axios库是一个强大的HTTP客户端库,可以帮助我们更方便地发送HTTP请求。使用axios库,我们可以更优雅地处理网络请求。

      kotlin val url = "https://api.example.com/data" val response = axios.get(url).await()

      希望以上建议对你有所帮助。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部