我正在尝试扩展 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
}
}