I am trying to separate some AsyncTask classes into public (separate) functions so that I don't have to rewrite so much code. I almost have it, except for one very important aspect. The AsyncTask function compiles an ArrayList, making php calls to the server. When this list is complete, I need to update the counter in the main user interface thread. I found a really nice answer here , but I have a little difficulty in his work.
Here is a smaller version of what I have: (note that at this point all I am trying to do is call the Toast message to prove that the round trip is working)
Here is the Activity call:
public class MyActivity extends Activity implements OnTaskCompleted { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sg_list = new ArrayList<String>(); new GetSuperGroups(UpdateAffiliationsPreferences.this, context, "Retrieving Group List...").execute(); } public void onTaskCompleted(ArrayList<String> list) { Toast.makeText(getApplicationContext(), "hello from async", Toast.LENGTH_SHORT).show(); } }
This is the interface:
public interface OnTaskCompleted { void onTaskCompleted(ArrayList<String> list); }
And finally, here is AsyncTask . Note that this is a Public class:
public class GetSuperGroups extends AsyncTask<String, String, ArrayList<String>> { private Activity activity; private Context context; private String progressMsg; private ProgressDialog pDialog; private ArrayList<String> sg_list; private OnTaskCompleted listener; public GetSuperGroups(Activity activity, Context context, String progressMsg) { this.activity = activity; this.context = context; this.progressMsg = progressMsg; } public void setSuperGroupList (OnTaskCompleted listener){ this.listener = listener; } @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(context); pDialog.setMessage(progressMsg); pDialog.setIndeterminate(false); pDialog.setCancelable(true); pDialog.show(); } @Override protected ArrayList<String> doInBackground(String... args) { sg_list = new ArrayList<String>();
source share