/ / Jak wywołać funkcję aktywności rodzica z ASyncTask? - android, android-asynctask, accountmanager

Jak wywołać funkcję aktywności rodziców z ASyncTask? - Android, Asynctask Androida, Accountmanager

setAccountAuthenticatorResult można wywołać z działania, które się rozszerza AccountAuthenticatorActivity. Moja aktywność to rozszerza, ale uruchamia ASyncTask i stąd setAccountAuthenticatorResult należy wywołać z ASyncTask (lub wynik ASyncTask powinien zostać przekazany z powrotem do głównego wątku).

Jak to zrobić?

Co jest nie tak w poniższym kodzie?

AsyncTask<Uri, Void, Bundle> task = new RetrieveAccessTokenTask(this, consumer, provider, prefs).execute(uri);

public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Bundle> {
private Context context;

public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,
OAuthProvider provider, SharedPreferences prefs) {
this.context = context;
}

@Override
protected void onPostExecute(Bundle result) {
context.setAccountAuthenticatorResult(); // doesn"t work

}

Odpowiedzi:

67 dla odpowiedzi № 1

Podczas tworzenia AsyncTask możesz dodać do niego nowy konstruktor i przekazać odwołanie do działania:

AsyncTask myTask = new MyTask(this);

A następnie z metody onPostExecute () w AsyncTask można wywołać metodę na działaniu.

public class MyTask extends AsyncTask<String, String, String>
{
public MyActivity activity;

public MyTask(MyActivity a)
{
this.activity = a;
}

//  ......

protected void onPostExecute(String result)
{
activity.myMethod();
}
}