当response.errorBody()
不为空但response.errorBody().string()
返回null时,可以尝试使用response.errorBody().source().buffer().clone().readUtf8()
来获取错误消息。
下面是一个使用Retrofit的示例代码:
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
public class MainActivity {
private Retrofit retrofit;
public void makeApiCall() {
// 创建Retrofit实例
retrofit = new Retrofit.Builder()
.baseUrl("https://api.example.com/")
.build();
// 创建API接口实例
ApiService apiService = retrofit.create(ApiService.class);
// 发起API请求
Call call = apiService.getData();
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
// 处理成功的响应
} else {
// 处理错误的响应
try {
String errorBodyString = response.errorBody().source().buffer().clone().readUtf8();
// 使用错误消息进行处理
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call call, Throwable t) {
// 处理请求失败
}
});
}
}
以上示例中,在处理错误响应时使用response.errorBody().source().buffer().clone().readUtf8()
来获取错误消息。请注意,需要捕获IOException
异常。
这种方法能够解决response.errorBody().string()
返回null的问题,并能够获取到错误消息。