java - android中如何防止代码重复

标签 java android oop android-volley

我是 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/

相关文章:

java - 一个传感器作为输出?

java - 用户定义对象的 ArrayList 的 indexOf() 不起作用

android - 滚动加载更多recycleview时设置最后一个位置

java - 如何在android web View 中显示html5页面

c# - 隐藏在 c# 中的方法以及一个有效的例子。为什么在框架中实现?什么是现实世界的优势?

java - 具有不同 Action 类的单个 JSP

android - 在android中玩iis流畅流(.ism)的技巧

.net - 多态泛型

python - 继承:更改子方法的签名

java - 在JAVA中使用SNMP进行网络发现