I’m having a go at extending Activity to define a standard method I can callback to from an AsynchTask. Here’s a skeleton code.
public class R3Activity extends Activity{
public void displayresult(String xmlresult){
}//displayresult
}
Now any activities I create by extending R3Activity can implement a displayresult method.
I then use this as follows…..
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));
}
}
}
The DatabaseAccess class is supposed to be a generic class that goes off and fetches data using an AsnchTask. My problem is handling the callback in a generic way.
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);
}
}
}
Now m_activity.displayresult works because this method is available in every instance of an R3Activity.
How do I get displayresult() to trigger an Event handler that I can implement in every Activity.
Something like….
public class MainActivity extends R3Activity implements DatabaseResultListener {
public void DbCallback(){
//This gets triggerred by the displayresult callback
}
}
I think you should use
interface for callback.and you can do it easily.Then implements it
And in
AsycTask,onPostExecute method call listener method like,