Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android编程中使用截击并保持代码干净?(回调问题)_Java_Android_Callback_Android Volley_Code Cleanup - Fatal编程技术网

Java 如何在Android编程中使用截击并保持代码干净?(回调问题)

Java 如何在Android编程中使用截击并保持代码干净?(回调问题),java,android,callback,android-volley,code-cleanup,Java,Android,Callback,Android Volley,Code Cleanup,现在我有了Android应用程序的工作代码。我使用截击,但是,由于回调,我觉得我的代码没有可能干净 我的代码现在有两个功能: private void updateSettings() { ... HTTP.requestObject(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void

现在我有了Android应用程序的工作代码。我使用截击,但是,由于回调,我觉得我的代码没有可能干净

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

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());
    ...
}
private void updateSettings(){
...
requestObject(Request.Method.GET,url,null,new Response.Listener()){
@凌驾
公共void onResponse(JSONObject响应){
试一试{
shiftStart=getHour(response.getString(“shift\u start”);
shiftEnd=getHour(response.getString(“shift_end”);
}捕获(JSONException e){
i(MainActivity.TAG,“JSON解析错误:+e.toString());
e、 printStackTrace();
}
startCall();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
handleError(错误,getApplicationContext());
startCall();
}
},getApplicationContext());
...
}
私有void startCall(){
...
CallActivity.makeCall(getApplicationContext());
...
}
这里的要点是,我想打一个“电话”,这并不重要,但在此之前,我需要从服务器更新我的设置。当然,我需要在更新设置后进行调用,因此我从截取回调开始调用(我使用HTTP.requestObject,这是我创建的自定义类,但它只将请求添加到请求队列并设置超时)。问题是,当您调用函数updateSettings()时,实际上并不希望启动“调用”或类似的操作。如何避免这种情况


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

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


解决方法是从本质上复制截击回调参数模式。拥有一个
OnSettingsUpdatedListener
接口,该接口将被传递给更新设置的方法,然后在那里调用侦听器的方法,该方法将路由回您调用它的位置,欢迎您在那里进行调用或其他操作

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

解决方法是从本质上复制截击回调参数模式。拥有一个
OnSettingsUpdatedListener
接口,该接口将被传递给更新设置的方法,然后在那里调用侦听器的方法,该方法将路由回您调用它的位置,欢迎您在那里进行调用或其他操作