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())
简而言之,这些方法有意做不同的事情