如何在 Android 编程中使用 Volley 并保持代码整洁? (回调问题)
How to use Volley in Android programming and keep code clean? (callback issues)
现在我的 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());
...
}
这里的重点是我想做一个"call",这不是很重要,但在此之前我需要从服务器更新我的设置。当然,我需要在更新设置后进行调用,所以我从 Volley 回调开始调用(我使用 HTTP.requestObject,这是我自定义的 class,但它只将请求添加到请求队列并设置超时)。问题是,当您调用函数 updateSettings() 时,您并不真正希望启动 "call" 或类似的东西。如何避免这种情况?
P.S。我不确定我是否清楚地解释了这个问题。如果您需要我澄清,请在下面询问。
如果该方法仅设计用于更新某些设置,那么是的,您应该对该方法执行单一责任原则,如果它不是这样做的,则不要进行调用。
解决方法是基本上复制 Volleys 回调参数模式。有一个 OnSettingsUpdatedListener
接口将传递给更新设置的方法,然后在那里调用侦听器的方法,该方法将路由回您调用它的地方,欢迎您拨打电话或其他任何地方。
现在我的 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());
...
}
这里的重点是我想做一个"call",这不是很重要,但在此之前我需要从服务器更新我的设置。当然,我需要在更新设置后进行调用,所以我从 Volley 回调开始调用(我使用 HTTP.requestObject,这是我自定义的 class,但它只将请求添加到请求队列并设置超时)。问题是,当您调用函数 updateSettings() 时,您并不真正希望启动 "call" 或类似的东西。如何避免这种情况?
P.S。我不确定我是否清楚地解释了这个问题。如果您需要我澄清,请在下面询问。
如果该方法仅设计用于更新某些设置,那么是的,您应该对该方法执行单一责任原则,如果它不是这样做的,则不要进行调用。
解决方法是基本上复制 Volleys 回调参数模式。有一个 OnSettingsUpdatedListener
接口将传递给更新设置的方法,然后在那里调用侦听器的方法,该方法将路由回您调用它的地方,欢迎您拨打电话或其他任何地方。