我的项目中有几个 Activity 子类,每个子类都调用一个基于 SOAP 的 Web 服务,处理和显示结果。SOAP 序列化、调用处理和结果解析成各种 POJO 对象都封装在 MyWebService 类中。此类通过 AsyncTask 执行实际的 Web 服务调用。
为了能够将结果传回给调用的 Activity 子类,我认为我强制所有这些活动都应该实现一个 WebServiceResultProcessor 接口,定义一个单独的函数 (processWebServiceResults) 作为 AsyncTask 的回调,从 onPostExecute 调用。
我还想在 Web 服务调用期间显示 ProgressDialog。我的问题来了。为了能够显示 ProgressDialog(来自 MyWebService 或它的 AsyncTask),我需要将引用传递给调用者 Activity 的 Context。为了能够从 AsyncTask 执行回调函数,我还需要传递相同的对象引用,但这次是作为 WebServiceResultProcessor。在我看来,这似乎是一种代码气味,两次传递同一个对象,但看不到任何解决方法。我可以创建一个新的基类,而不是接口,扩展 Activity 类并强制从扩展类继承,但这意味着我将排除 ListActivity 等使用此 MyWebService 类。
有一个更好的方法吗?