0

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

}
4

1 回答 1

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);
于 2012-07-12T11:09:15.000 回答