Существует несколько способов сделать это, но один из моих любимых способов - это интерфейс обратного вызова.
Здесь JSONTransmitter:
public class JSONTransmitter extends AsyncTask<JSONObject, JSONObject, JSONObject> {
private OnJsonTransmitionCompleted mCallback;
public JSONTransmitter(OnJsonTransmitionCompleted callback) {
this.mCallback = callback;
}
@Override
protected JSONObject doInBackground(JSONObject... data) {
//.....
return json;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
this.mCallback.onTransmitionCompleted(jsonObject);
}
public interface OnJsonTransmitionCompleted {
void onTransmitionCompleted(JSONObject jsonObject);
}
}
Обратный вызов интерфейса OnJsonTransmitionCompleted
находится внутри JSONTrasnmitter
, как единственное его использование с JSONTransmitter
.
Вот основной вид деятельности:
public class SupportMapActivity extends Activity implements JSONTransmitter.OnJsonTransmitionCompleted{
public void sync(View v){
LocationsDB mLocationsDB = new LocationsDB(SupportMapActivity.this);
Cursor events= mLocationsDB.getAllLocations();
try {
JSONObject json = makJsonObject(events);
JSONTransmitter transmitter = new JSONTransmitter(this);
transmitter.execute(new JSONObject[]{json});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onTransmitionCompleted(JSONObject jsonObject) {
// Now you have access to your JSON data in your activity!
}
}
Таким образом, мы создаем интерфейс обратного вызова внутри JSONTransmitter
, который имеет один метод void onTransmitionCompleted(JSONObject jsonObject)
, который будет проходить в JSONObject
вашей деятельности от onPostExecute(JSONObject jsonObject)
.
Внутри основной деятельности мы реализуем JSONTransmitter.OnJsonTransmitionCompleted
и передать в this
, когда мы создаем JSONTransmitter
и, наконец, мы Override void onTransmitionCompleted(JSONObject jsonObject)
внутри деятельности и как только наш AsyncTask
закончил свой фоновый процесс и onPostExecute(JSONObject jsonObject)
был назван мы получим JSONObject
внутри реализованного метода onTransmitionCompleted(JSONObject jsonObject)
.
Я надеюсь, что это помогает здесь несколько ссылок на эту тему:
android asynctask sending callbacks to ui
http://android-er.blogspot.co.il/2013/09/implement-callback-function-with.html
http://blog.redkitmedia.com/android-asynctask-sending-callbacks-to-ui/
http://android-dwivediji.blogspot.co.il/2014/01/best-way-to-use-asynctask-class.html
AsyncTask является асинхронным. Вы вернете результат в onPostExecute(). – BladeCoder
Возможный дубликат [android asynctask отправки обратных вызовов в ui] (http://stackoverflow.com/questions/9963691/android-asynctask-sending-callbacks-to-ui) Либо используйте интерфейс для включения обратного вызова в свою активность, либо просто сделайте AsyncTask внутренним классом Activity. –