Ci è voluto un po 'di tempo per farlo funzionare, ma chiaramente non è la migliore pratica. In breve, ho bisogno di mostrare una finestra di dialogo quando termina il mio AsyncTask, ma getApplicationContext() non funziona, né lo passa come parametro durante la creazione di AsyncTask. Così ho dichiarato una variabile pubblica per il contesto nella mia classe AsyncTask e metta dinanzi eseguo:Android AsyncTask Miglior modo di accedere al contesto delle attività
private OnClickListener clickLoadRefs = new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("H","Clicked Load Refs");
RefreshRefPoints refreshRefPoints = new RefreshRefPoints();
refreshRefPoints.myCtx=v.getContext();
refreshRefPoints.execute(v.getContext());
}
};
private class RefreshRefPoints extends AsyncTask<Context, Integer, Integer> {
private Integer nPoints=0;
public Context myCtx;
private ProgressDialog pd;
protected Integer doInBackground(Context... ctx) {
Log.d("H","doInBackground()");
dbHelper.clearRefPoints();
requestRefPoints();
nPoints = parseRefPointsCSV();
return nPoints;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPreExecute()
{
pd = ProgressDialog.show(myCtx, "Refreshing Reference Points", "Loading...", true,false);
Log.d("H", "onPreExecute()");
}
protected void onPostExecute(Integer result) {
pd.dismiss();
AlertDialog.Builder builder = new AlertDialog.Builder(myCtx);
builder.setTitle("Reference points refresh complete");
builder.setMessage(result+" records loaded");
builder.setPositiveButton("OK",null);
builder.show();
Log.d("H","onPostExecute()");
}...etc
Qualcuno può solo farmi vedere il modo corretto di passare il contesto?
Grazie
Ma ci sono perdite di memoria –