Me llevó un buen rato hacer que esto funcione, pero claramente no es una buena práctica. En resumen, necesito mostrar un cuadro de diálogo cuando finaliza mi AsyncTask, pero getApplicationContext() no funciona, ni lo pasa como parámetro al crear AsyncTask. Así que he declarado una variable pública para el contexto en mi clase AsyncTask y la ponga delante ejecuto:Android AsyncTask Mejor forma de acceder a la actividad Contexto
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
Puede alguien me acaba de mostrar la forma correcta de pasar el contexto?
Gracias
Pero da pérdidas de memoria –