怎样将printStackTrace函数的结果保存到String中呢?

在一次使用Retrofit访问服务器的过程中,一直访问失败

val namecall:Call<NameBean> = ipService.getNameForId(s)
Log.d("zzz", "namecall:----${namecall} ")
namecall.enqueue(object:Callback<NameBean>{
    override fun onFailure(call: Call<NameBean>, t: Throwable) {
        Log.d("zzz", "onFailure: ")
        t.printStackTrace()
        val sw = StringWriter()
        t.printStackTrace(PrintWriter(sw))
        Log.d("zzz", "t.printStackTrace():${ sw.toString()}")
    }
    override fun onResponse(call: Call<NameBean>, response: Response<NameBean>) {
        Log.d("zzz", "onResponse: ")
        if (response != null) {
            if(response.isSuccessful) {
                val getid:NameBean=response.body()
                Log.d("zzz", getid.toString())
                Toast.makeText(MainActivity.mainactivity,getid.toString(),Toast.LENGTH_SHORT).show()
            }
            else
            {
                Toast.makeText(MainActivity.mainactivity,"error",Toast.LENGTH_SHORT).show()
            }
        }
    }
})

在上面的onFailure(call: Call<NameBean>, t: Throwable)中想看看t到底输出上面错误,

使用 t.printStackTrace() 后调用t.getCause()却打印出null

于是网上找到解决方法:

t.printStackTrace()

val sw = StringWriter()

t.printStackTrace(PrintWriter(sw))

Log.d("zzz", "t.printStackTrace():${ sw.toString()}")

成功打印出错误,然后解决了错误。

是因为

安卓p默认把http传输请求都拒绝了。

解决方法
1.在build.gradle中把targetSdkVersion改为27及以下。

targetSdkVersion 27 //对应的是android 8.1, 28是9.0 所以。。
1
2.在AnroidManifest.xml中添加

android:usesCleartextTraffic="true"  //默认是false,现改为true
1
3.最根本的方法是将app改为https传输,同时服务器端也需支持https
 

上一篇:PartnerRIP YETEK RIP SW 韩国印特打印色彩管理软件


下一篇:终-Echart可视化学习(十二)