Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin OkHttp方法.toString()和.string()之间有什么区别?_Kotlin_Okhttp_Okhttp3 - Fatal编程技术网

Kotlin OkHttp方法.toString()和.string()之间有什么区别?

Kotlin OkHttp方法.toString()和.string()之间有什么区别?,kotlin,okhttp,okhttp3,Kotlin,Okhttp,Okhttp3,我有一段代码: override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) { try { Log.d("DEBUG POST=====>", response.body()!!.string()) }catch(e:IOException) { e.printStackT

我有一段代码:

    override fun onResponse(call: Call<ResponseBody>, response: Response<ResponseBody>) {
        try {
            Log.d("DEBUG POST=====>", response.body()!!.string())
        }catch(e:IOException) {
            e.printStackTrace()

        }

    }
override-fun-onResponse(调用:调用,响应:响应){
试一试{
Log.d(“调试日志====>”,response.body()!!.string()
}捕获(e:IOException){
e、 printStackTrace()
}
}
当我使用
response.body()时!!。string()
我得到了正确的输出和JSON正文

当我使用:
response.body().toString()
时,我得到了
okhttp3.ResponseBody$1@c626d25

有谁能告诉我这两种方法之间的区别吗?

string()
不是有效的Kotlin(或Java)方法,因为这两种语言都没有定义它。它是由OkHttp在中定义的,这是获取类的实际字符串值的正确方法。它不会覆盖
toString
,这意味着调用
toString()
转到
Object
,它会以您得到的格式返回对象。确切地说,它返回对象的十六进制表示形式

TL:DRJava或Kotlin没有定义
string()
方法,OkHttp库在
responsebook
类中定义了方法
toString
不会被重写,使其返回类的十六进制表示形式,而不是主体的字符串值。使用
string()
而不是
toString()

根据
string()
函数:

以使用内容类型标头的字符集解码的字符串形式返回响应。如果该标头不存在或缺少字符集,则将尝试根据其BOM或UTF-8对响应正文进行解码。自动关闭响应库

相反,在本例中,所有Java/Kotlin对象上的
toString()
方法不是为
ResponseBody
定义的。在这种情况下,将调用
java.lang.Object
上的版本,其标准实现是发出对象的类名和对象的哈希代码(十六进制)

从:

返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于一个人阅读。建议所有子类重写此方法

class对象的toString方法返回一个字符串,该字符串由对象作为实例的类的名称、at符号字符“@”和对象哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())
简而言之,这些方法有意做不同的事情