Retrofit POST请求中替换无法解析主机错误为友好提示的方法
解决Retrofit请求服务器离线时的友好提示问题
我来帮你搞定这个问题!其实核心就是在错误回调里捕获特定的异常,然后替换成用户看得懂的提示就行,具体步骤如下:
1. 确保你的回调包含错误处理方法
看你贴的代码用了WebserviceCallBack,这个回调应该有对应的错误回调方法(比如onError(Throwable error)或者类似的),如果还没定义,得先补上。比如:
public interface WebserviceCallBack { void onResponse(String response, int code); void onError(Throwable throwable); // 补上这个错误回调方法 }
2. 在错误回调里判断异常类型并替换提示
在你发起请求的代码里,实现onError方法,捕获UnknownHostException(这就是导致"Unable to resolve host"错误的根源),然后弹出友好提示:
mEasyRetrofit.setPostMethod(WebConstants.CONTACT_FAMILY_LIST_URL, map, hashmap, new WebserviceCallBack() { @Override public void onResponse(String response, int code) { // 你的成功处理逻辑 } @Override public void onError(Throwable throwable) { // 判断是否是服务器不可达的异常 if (throwable instanceof UnknownHostException) { // 弹出友好提示,这里要注意用正确的Context,比如你的Activity实例 Toast.makeText(getApplicationContext(), "服务器不可达,请检查网络或稍后重试", Toast.LENGTH_SHORT).show(); } else { // 其他错误可以显示默认信息或者具体错误(根据需求调整) Toast.makeText(getApplicationContext(), "请求失败:" + throwable.getMessage(), Toast.LENGTH_SHORT).show(); } } });
3. 额外注意事项
- 别忘了导入
java.net.UnknownHostException包,不然会编译报错。 - 如果你的
mEasyRetrofit是封装过的Retrofit工具类,要确保它在请求失败时会正确调用onError方法,把Throwable传递过来。比如在Retrofit的onFailure回调里,把异常传给自定义的WebserviceCallBack.onError。
举个封装工具类里的错误传递示例(如果你的工具类是这么写的):
// 假设这是你封装的setPostMethod内部的Retrofit请求逻辑 call.enqueue(new Callback<ResponseBody>() { @Override public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { // 处理成功响应,调用onResponse } @Override public void onFailure(Call<ResponseBody> call, Throwable t) { // 把异常传递给自定义回调的onError webserviceCallBack.onError(t); } });
这样就能完美替换掉那个技术感十足的错误提示,给用户更友好的反馈啦!
内容的提问来源于stack exchange,提问作者kasim Rangwala
相关产品推荐
相关产品推荐

