Mam kilka prywatnych metod AsyncTask, które chciałbym włamać się do publicznych klas zewnętrznych. W mojej aplikacji mam publiczną klasę rozszerzającą Application, która przechowuje pewne wspólne procedury, do których chcę uzyskać dostęp z różnych części mojej aplikacji. Kiedy jednak przerywam klasę AsyncTask, nie mogę już wywoływać metody getApplicationContext(), aby uzyskać odwołanie do mojej biblioteki aplikacji (klasa nie dziedziczy teraz niczego od działania). Funkcja getBaseContext() również będzie miała problemy. Czy powinienem przekazywać kontekst do AsyncTask, gdy zostanie on utworzony i zbudowany z tego? Nie jestem pewien, czy to było bezpieczne, czy nie.getApplicationContext w klasie AsyncTask?
import java.util.ArrayList;
import android.os.AsyncTask;
public class DlTask extends AsyncTask
{
long totalbytes = 0;
long totalread = 0;
ArrayList <String> data;
@Override
protected void onPreExecute()
{
AppLib lib = (AppLib) getApplicationContext();
lib.saveStatusText ("Contacting " + lib.getServerAddress() + ":" + lib.getServerPort() + "...");
super.onPreExecute();
}
@Override
protected Object doInBackground (Object... params)
{
data = lib.sendCommand (CMD_LIST);
return true;
}
@Override
protected void onPostExecute (Object result)
{
if (data != null)
{
lib.saveStatusText (data.size() + " files found");
}
else
{
Log.d (TAG, "data is null");
Toast.makeText (getBaseContext(), msg, Toast.LENGTH_SHORT).show();
}
super.onPostExecute(result);
}
}
Powinieneś przechodzić w kontekście w konstruktorze. –
należy używać konstruktora AsyncTask z kontekstowymi. – Ashok