我知道 volley 对于网络图书馆来说非常有用。我的问题是我必须多次调用 API 请求,是否有机会在单独的类中调用此代码并每次都使用它?
String url = "sameurl";
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
}
})
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq);
最佳答案
您可以使用监听器来执行此操作。将所有网络和 Volley 相关的代码移到一个单独的类中。将其所需的对象和数据(如 URL、http 方法、 header 等)作为方法参数传递。
您还需要有一个您的调用类将实现的接口(interface),当收到响应或请求失败时,volley将调用该接口(interface)的方法来通知调用者。
您的界面将如下所示
public interface HttpListener {
void onResponseReceived(JSONObject response);
void onError(VolleyError error);
}
现在在你的 Volley 课上你会遇到这样的事情
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
//pass httpListener instance as a method parameter to this method
if(httpListener != null) {
httpListner.onResponseReceived(response);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
if(httpListener != null) {
httpListner.onError(VolleyError error);
}
}
})
当您进行 http 调用时,您还需要传递此监听器。最简单的方法是让您的调用者类实现此接口(interface)并将 this
作为 HttpListner 的对象传递
您的调用者类将实现 HttpListener 接口(interface)并重写方法。每当您通过此重写方法收到响应或任何错误时,您都会收到回调。
关于java - API 请求多次使用相同的截击类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345516/