我正在扩展Activity以定义一个我可以从AsynchTask回调的标准方法。这是一个骨架代码。
public class R3Activity extends Activity{
public void displayresult(String xmlresult){
}//displayresult
}
现在我通过扩展R3Activity创建的任何活动都可以实现displayresult方法。
然后我按如下方式使用它......
public class MainActivity extends R3Activity{
private void somemethod(){
DatabaseAccess dba = new DatabaseAccess();
dba.setActivity(this); // Pass a ref to the activity into the class with the Asynch task
dba.execute(new URL(database_url));
}
}
}
DatabaseAccess类应该是一个泛型类,它使用AsnchTask来获取数据。我的问题是以通用的方式处理回调。
public class DatabaseAccess extends AsyncTask<URL, String, String> {
private R3Activity m_activity;
public void setActivity(R3Activity activity) {
m_activity = activity;
}
@Override
protected String doInBackground(URL... params) {
//Connect to database etc
String strdata = "blah";
}
protected void onPostExecute(String result) {
if ((strdata != null) && (m_activity != null)) {
m_activity.displayresult(strdata);
}
}
}
现在m_activity.displayresult有效,因为此方法在R3Activity的每个实例中都可用。
如何让displayresult()触发我可以在每个Activity中实现的事件处理程序。
像......那样的东西。
public class MainActivity extends R3Activity implements DatabaseResultListener {
public void DbCallback(){
//This gets triggerred by the displayresult callback
}
}
答案 0 :(得分:2)
我认为您应该使用interface for callback
。您可以轻松完成。
interface AsyncTaskListener{
public void onTaskComplete(T result)
}
然后实现它
public class MainActivity extends Activity implements AsyncTaskListener
并在AsycTask,onPostExecute method call listener method like,
objAsyncTaskListener.onTaskComplete(T result);