OkHttp中response.body()的.toString()与.string()方法有何区别?
为什么
response.body()!!.string()和response.body().toString()的输出不一样? 这个问题我之前帮好几个开发者排查过,本质是OkHttp里ResponseBody的两个方法完全不是一回事儿,咱们拆开说:
1. response.body()!!.string():获取响应的实际内容
- 这个方法是专门用来读取HTTP响应体的文本内容的,它会把服务器返回的字节流(比如JSON、HTML或者普通文本)转换成字符串。
- 注意:这个方法只能调用一次,因为它会把响应体的流读完并关闭,第二次调用就会抛出异常,这点要特别注意!
- 你看到的正确JSON输出,就是这个方法帮你把服务器返回的原始数据解析成了可读的字符串。
2. response.body().toString():获取对象的默认字符串表示
- 这个方法其实是继承自Java的
Object类的默认toString()实现,它的作用是返回对象的内存地址标识,格式一般是类名@哈希码,也就是你看到的okhttp3.ResponseBody$1@c626d25。 - 它根本不会去读取响应体的内容,只是告诉你这个ResponseBody对象在内存里的“身份标识”,完全不是你要的响应内容。
简单总结一下:前者是读取响应内容的业务方法,后者是Java对象的通用标识方法,完全是两个维度的东西。如果要获取响应体的文本,一定要用string()(或者针对字节的bytes()方法),绝对不要用toString()。
内容的提问来源于stack exchange,提问作者Tony Sherman
相关产品推荐
相关产品推荐

