lo que va dentro del constructor de diálogo

Sé que debe ser contexto. ¿Qué es exactamente un contexto? por lo general, cuando creo un diálogo en una clase, hago algo como esto:

final Dialog dialog = new Dialog(this);

pero ahora estoy tratando de crear un cuadro de diálogo en AsyncTask<>, por lo tanto, no puedo hacer lo anterior porque Evidentemente, AsyncTask no es un contexto. AsyncTask es una clase en sí misma, lo que quiere decir que no es una subclase en este momento.

public class popTask extends AsyncTask<Void, Void, String> {

Context con =

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);

    final Dialog dialog = new Dialog(con);
    dialog.setContentView(R.layout.custom);
    dialog.setTitle("New & Hot advertise");

    // set the custom dialog components - text, image and button
    TextView text = (TextView) dialog.findViewById(R.id.text);
    text.setText("Android custom dialog example!");
    ImageView image = (ImageView) dialog.findViewById(R.id.image);
    image.setImageResource(R.drawable.yoda);

    Button dialogButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
    // if button is clicked, close the custom dialog
    dialogButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            dialog.dismiss();
        }
    });

    dialog.show();
}


@Override
protected String doInBackground(Void... params) {
    // TODO Auto-generated method stub
    return null;
}



}

preguntado el 12 de junio de 12 a las 16:06

2 Respuestas

Las siguientes son las dos formas en que puede enviar su contexto desde la actividad donde está ejecutando su AsyncTask:

popTask pTask = new popTask(mContext); //OR
pTask.execute(mContext);

En su popTask cree una variable privada donde pueda establecer su contexto.

En la primera opción necesitas tener un constructor para tu clase. popTask donde estás aceptando un contexto.

Para la segunda opción, si no está pasando nada significativo a la función doInBackground() puedes cambiar la siguiente línea:

public class popTask extends AsyncTask<Object, Void, String>

protected Object doInBackground(Object... params) {
this.mContext = (Context) params[0];

}

recibirá el objeto de contexto en el doInBackground() que puede establecer en la variable de contexto privado de la popTask clase y luego acceda a ella en el doInBackground() función.

Respondido el 12 de junio de 12 a las 16:06

después de crear la primera opción. - jl

puedo ejecutar haciendo pTask.execute(); - jl

Sí, he incluido un OR que significa cualquiera de las dos soluciones, pero no ambas a la vez. Si está utilizando la primera opción, entonces puede usar pTask.execute(). Espero que la respuesta haya sido útil. - arun george

Para agregar a la respuesta de Samir

Modifique su código para tener un constructor que tome el contexto de la clase de llamada.

public class popTask extends AsyncTask<Void, Void, String> {

    private Context context;
    public popTask(Context context)
    {
        this.cotext=context;
    }

y entonces Dialog dialog = new Dialog(context);

En su actividad de llamadas, llame a este Asynctask así

new popTask(ActivityName.this).execute();

Respondido el 12 de junio de 12 a las 16:06

parece aceptar ActivityName.class pero en su lugar ActivityName.this. no estoy seguro acerca de la diferencia... solo hacértelo saber. Gracias de nuevo por la ayuda - jl

oh, lo siento... debería ser ActivityName.this... Actualicé mi respuesta. También acepte la respuesta para que sea útil para otras personas que tienen un problema similar. - vipul

ahora no hay errores de compilación, pero el cuadro de diálogo simplemente no aparece... ¿tal vez necesito usar runOnUiThread() en alguna parte? - jl

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.