pan*_*kaj 7 android android-volley
我最近开始在我的项目中使用Android Volley.大多数教程中提到的常见做法是以这种方式使用它:
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// do something
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// do something.
}
});
Run Code Online (Sandbox Code Playgroud)
我的疑问是 - 我们是否必须在我们需要提出请求的任何地方重复此代码.我试图通过创建一个辅助类来放入一个共同的onResponse和onErrorResponse处理程序:
public class CustomJSONObjectRequest extends JsonObjectRequest {
private BaseResource resource;
private String queryId;
private String paramArgs;
public CustomJSONObjectRequest(int method, String url, JSONObject
jsonRequest,
Response.Listener<JSONObject> listener,
final Response.ErrorListener errorListener,
final Context ctx,
final BaseResource baseResource) {
super(method, url, jsonRequest,
new Response.Listener<JSONObject>() {
// some common code for all BaseResources
},
new Response.ErrorListener() {
// some common code
});
}
Run Code Online (Sandbox Code Playgroud)
但是这种方法的问题在于我需要传递构造函数本身的每一件事,这让我觉得我没有正确地做到这一点.例如,如果我需要为url传递一些查询参数,我需要始终从调用者传入完整的url,尽管我仍然可以在一个地方生成一个通用逻辑来生成url.
有人可以让我知道实现这样的事情的最佳方法是什么.
BNK*_*BNK 15
您可以参考我的示例代码,如下所示:
public interface VolleyResponseListener {
void onError(String message);
void onResponse(Object response);
}
Run Code Online (Sandbox Code Playgroud)
然后在我的VolleyUtils课程中:
public static void makeJsonObjectRequest(Context context, String url, final VolleyResponseListener listener) {
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest
(url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
listener.onResponse(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
listener.onError(error.toString());
}
}) {
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
try {
String jsonString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET));
return Response.success(new JSONObject(jsonString),
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (JSONException je) {
return Response.error(new ParseError(je));
}
}
};
// Access the RequestQueue through singleton class.
VolleySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);
}
Run Code Online (Sandbox Code Playgroud)
然后在活动中:
VolleyUtils.makeJsonObjectRequest(mContext, url, new VolleyResponseListener() {
@Override
public void onError(String message) {
}
@Override
public void onResponse(Object response) {
}
});
Run Code Online (Sandbox Code Playgroud)
另一种方法是创建一个VolleyResponseListener变量,然后将其传递给VolleyUtils类的方法,作为我在以下问题中的答案:
Android:如何从使用Volley的方法返回异步JSONObject?
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
8630 次 |
| 最近记录: |