【发布时间】:2013-02-22 08:56:00
【问题描述】:
我有两个类 - 一个定义 BaseActivity(我在应用程序中的所有活动的全局父级),另一个是 AsyncTask 类,我在其中定义了常见的网络操作。但我有下一个问题。 AsyncTask 在他的onPostExecute() 方法中名为RestfulNetworkTasks 的类必须调用在BaseActivity 类中定义的UpdateCurrentActivityAfterNetworkOperation(),但BaseActivity 类还必须创建RestfulNetworkTasks 的实例。这是清楚地说明这个问题的代码。
class RestfulNetworkTasks extends AsyncTask<Pair<String, LinkedHashMap<String, Object>>, Void, LinkedHashMap<String, Object>> {
private ImmutableMap<String, Object> serverData_;
NetworkOperation LowLevelRestOperations_ = new NetworkOperation();
@Override
protected LinkedHashMap<String, Object> doInBackground(Pair<String, LinkedHashMap<String, Object>>... params) {
return LowLevelRestOperations_.executeServerCommand(params[0].getValue0(), params[0].getValue1());
}
protected void onPostExecute(LinkedHashMap<String, Object> result) {
serverData_ = copyOf(result);
BaseActivity instance_Activity = new BaseActivity();
//BaseActivity injection (It is too bad to create Activity in such a way - I know!) So I need some piece of advice
instance_Activity.UpdateCurrentActivityAfterNetworkOperation(serverData_);
//Here I must call method for updating GUI after operation
}
public ImmutableMap<String, Object> GetDataFromServer() {
return serverData_;
}
}
public class BaseActivity extends Activity {
RestfulNetworkTasks serverOperation_ = new RestfulNetworkTasks(); //RestfulNetworkTasks injection
public void UpdateCurrentActivityAfterNetworkOperation(
ImmutableMap<String, Object> server_data) {
}// Here is this method which I will override in my child activities
@SuppressWarnings("unchecked")
public ImmutableMap<String, Object> Login(LinkedHashMap<String, Object> parameters) {
Pair<String, LinkedHashMap<String, Object>> params_ = new Pair<String, LinkedHashMap<String, Object>>(LOGIN_COMMAND, parameters);
serverOperation_.execute(params_);
return serverOperation_.GetDataFromServer();
}
}
如您所见,我在 RestfulNetworkTasks 和 BaseActivity 类之间存在循环依赖关系,这可能导致构造函数的无限链调用。
我该如何重构这个设计以避免这种情况?
【问题讨论】:
-
你能再格式化一下你的代码吗?它现在有点不可读。尝试将其复制粘贴到 Eclipse 中并点击
ctrl-shift-f。
标签: java android dependency-injection circular-dependency