我正在开发Android应用程序,我需要在其中进行大量的http查询。由于Android有限制阻止程序在UI线程上发出http请求,我必须使用大量的Async方法来获取服务器的响应。我不是使用回调的大师,我现在面临着一个代码设计问题:
基本上,我有一个要显示的活动。我希望应用程序在创建活动时向服务器发出HttpRequest,因此我可以根据查询响应准备活动内容。
由于我使用Google Volley库发出http请求,因此我的代码设计是:
// in the Activity
OnCreate(Bundle b){
String response = RequestManager.makeRequest(args);
// other works based on the response in this activity.
}
// RequestManager Class
public static String makeRequest(args){
String url = getUrl();
// response callback
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Don't know what to do here
}
};
// error callback
Response.ErrorListener errorListener = new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// deal with errors
}
};
BuildRequestAndPushToQueue(url, responseListener, errorListener);
// No way to return the response!
}
我知道我的设计完全不正确,因为String response = RequestManager.makeRequest(args);
意图等待阻塞调用,但调用实际上是异步的。
我的最终目标是让响应String返回到活动中的某些代码,因此它可以使用活动上下文来完成其余的工作(比如访问imageview等)。但我不确定如何设计代码流来实现这一目标。