我正在使用简单的AsyncTask将网页的源代码下载为String。到目前为止一切正常。
但是,我不想总是对结果字符串做同样的事情,有时我想用它来填充gui,有时我想解析它,有时我想用它作为参数调用更多的函数。 实际上,我有多个活动和多个需要下载页面源代码的类。
当然,onPostExecute()必须处理我的Task的结果,但是因为它会从很多地方调用,并且出于很多不同的原因我真的不知所措。
我该怎么办?
我真的不想编写20个AsyncTasks,它们总是在doInBackground(...)中使用不同的onPostExecute执行相同的操作,也不希望来自20个不同类/活动的代码最终在一个onPostExecute中,我的代码维护起来很复杂。
有什么建议吗? 感谢
答案 0 :(得分:1)
我会通过使用接口来解决它。创建一个异步任务,在doInBackground中执行正确的操作,并获取一些参数,以便您知道在onPostExecute中要执行的操作,并将参数和结果传递给onPostExecute。
然后使用 handleSourceCodeString(String source); 等方法创建一个接口,然后为您要执行的每个操作实现一个类。然后将类放在某个init函数的映射中。
Map<String, Class> myActionMap = new HashMap<String,Class>;
myActionMap.put("parse-soruce", ParseSource.class) //(where ParseSource.class implements your interface)
然后在你的postExecute中做类似的事情:
((MyActionInterface)myActionMap.get(action).newInstance()).handleSourceCodeString(source);
答案 1 :(得分:0)
我发现这个...喜欢这个想法......看起来很简单,比我认为使用界面更好。
AsyncTask onPostExecute call from outside the AsyncTask
看第一个答案