android - 如何在android中单行处理多个网络调用的响应代码
问题描述
这是我的面试问题。我在各个网站上搜索并尝试了很多,但我无法找到解决方案。场景:首先在android应用程序网络调用授权调用,如果它成功然后其他网络调用进入计时器大约需要10到20个调用。如果任何一个调用响应代码不是200,那么再次需要调用授权调用。这里的条件:我们不能将我们的响应代码处理逻辑放在每个网络调用逻辑中。我们需要放在一行中,以便它适用于所有调用
在安卓中怎么做?
解决方案
这种情况可以通过我们从我们使用的网络库中获得的回调来处理。
我个人使用 Volley 进行网络通话,因为它来自 google,所以我的客户想坚持使用它。这里不讨厌 Retrofit 和 OkHttp。
基本上,您可以通过扩展 Volley 的 Request 类来创建一个通用适配器,适配器的构造函数希望您将错误侦听器传递给 supper 方法。
public class MyVolleyRequest<T> extends Request<T>
{
public MyVolleyRequest(int method, String url, Class<T> myClass, String requestBody,
Response.Listener<T> listener, Response.ErrorListener errorListener) {
super(method, url , errorListener);
// Other initialization.
}
// Rest of the code
}
由于适配器的构造函数在每个网络调用中都需要一个 ErrorListner 的实例,因此您可以传递postLoginErrorResponse
登录后的所有后续网络调用。
ErrorListener postLoginErrorResponse = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// Call the authentication flow.
}
});
推荐阅读
- python - 无法从 numpy 数组加载数据以进行 SVM 分类
- unity3d - 着色器错误:函数返回值缺少语义
- react-navigation - 如何将 tabbarOptions 代码的一部分传输到 ClojureScript
- jquery - 使用 JQuery 从 menu.html 加载菜单,然后激活当前链接
- node.js - 如何使用 Mongoose 和节点连接到特定数据库?
- javascript - 在 MongoDB/Node.js 中使用 findOneAndUpdate 自动增加值的问题
- javascript - 在单独的窗口中渲染 Monaco 编辑器
- python - 提交表单而不刷新页面
- php - 如何从复杂的 php 对象中获取特定变量?
- reactjs - 如何在 React JS 中加载 SVG 列表