我是 Android 和 OOP 新手。我知道福勒的恶臭之一是代码重复。我在不同 Activity 的整个项目中大约有 25 个 volley 请求,并且在所有这些请求中,都有 90% 的相同代码。
看看这个伪代码:
on Error:
if no connection:
Toast "no connection"
else if no response:
Toast "server error"
else
show popup with a retry button which will call the function which this request is inside it again.
我的第一个问题是如何将这些编写在一个地方并在不同的地方使用整个请求对象。
我的第二个问题是,在一些特殊 Activity 中有一些与 Activity 相关的代码。例如,在我的登录页面上没有未经授权错误,但在其他页面上却有。或者如您所见,在上面代码的最后一个else中,我说过记忆一下该函数,如果每个请求都不同的话。我该如何处理?
我该怎么做? 有什么特别的引用吗? tnx
最佳答案
您可以创建一个 util 类来创建请求。
例如,这个类能够使用 JSONObject
创建 GET 请求,在出错时显示 Toast 消息,并在成功时执行您作为参数传递的函数:
public class VolleyUtils{
public static JsonObjectRequest createGetRequest(String url, Consumer<? super JSONObject> successCallback){
return new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
successCallback.consume(response)
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (volleyError instanceof TimeoutError || volleyError instanceof NoConnectionError) {
VolleyUtils.showToast("No Internet connection");
} else if (volleyError instanceof AuthFailureError) {
VolleyUtils.showToast("Bad authentication");
} else if (volleyError instanceof ServerError) {
VolleyUtils.showToast("Error with server");
} else if (volleyError instanceof NetworkError) {
VolleyUtils.showToast("Network error");
} else if (volleyError instanceof ParseError) {
VolleyUtils.showToast("Parsing Error");
}
}
});
}
private static void showToast(String errorText){
Toast.makeText(getApplicationContext(), errorText, Toast.LENGTH_SHORT).show();
}
}
因此,要创建新请求,您只需要:
//supposing you get the RequestQueue with Singleton Pattern
MySingleton.getInstance().addToRequestQueue(VolleyUtils.createGetRequest("www.google.com", (JSONObject response) -> {
//stuff to do when request has success, for example :
myTextView.setText(response.toString())
} ));
关于java - android中如何防止代码重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51907645/