如何在Android编程中使用Volley并保持代码清洁? (回调问题)

时间:2016-06-18 12:58:25

标签: java android callback android-volley code-cleanup

现在我已经为我的Android应用程序编写了代码。我使用Volley,但是,由于回调,我觉得我的代码不像我那样干净。

我现在的代码的两个功能是:

private void updateSettings() {
    ...
        HTTP.requestObject(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    shiftStart = getHour(response.getString("shift_start"));
                    shiftEnd = getHour(response.getString("shift_end"));
                } catch (JSONException e) {
                    Log.i(MainActivity.TAG, "JSON parse error: " + e.toString());
                    e.printStackTrace();
                }

                startCall();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                HTTP.handleError(error, getApplicationContext());
                startCall();
            }
        }, getApplicationContext());
    ...
}

private void startCall() {
    ...
    CallActivity.makeCall(getApplicationContext());
    ...
}

这里的要点是我想做一个“调用”,这不是很重要,但在此之前我需要从服务器更新我的设置。当然,我需要在设置更新后进行调用,所以我从Volley回调开始调用(我使用HTTP.requestObject,这是我自己制作的一个自定义类,但它只是将请求添加到请求中排队并设置超时)。问题是当你调用函数updateSettings()时,你真的不希望启动“调用”或类似的东西。如何避免这种情况?

P.S。我不确定我是否清楚地解释了这个问题。如果您需要我澄清,请在下面询问。

1 个答案:

答案 0 :(得分:2)

如果该方法仅用于更新某些设置,那么您应该对该方法强制执行单一责任原则,如果不打算这样做则不进行调用。

解决方法是基本上复制Volleys回调参数模式。有一个OnSettingsUpdatedListener接口将被传递给更新设置的方法,然后在那里调用监听器的方法,这些方法将路由回你所呼叫的地方,欢迎你在那里打电话或其他什么。