Alzar un brindis desde AsyncTask
Estoy tratando de levantar una tostada de asynctask, pero estoy teniendo problemas para conseguir mis parámetros correctos. Estoy brindando de onProgressUpdate, así que estoy en el hilo de interfaz de usuario, que creo que es correcto. Creo que me estoy equivocando con el parámetro de contexto, ¿qué debo pasar como un valor?
EDIT: Mostrando código abajo
- Pérdida de memoria a pesar de usar weakreference
- Modificar vistas en AsyncTask doInBackground () no (siempre) arrojar excepción
- Cargando imágenes en un gridview con tarea asíncrona, no cargando correctamente
- ¿Cuál es el meanining de 3 puntos en parámetros de función?
- Java.util.concurrent.RejectedExecutionException en Async Tarea Android
@Override protected void onProgressUpdate(String... strings){ Toast toast = Toast.makeText(MainActivity.this, strings[0], Toast.LENGTH_LONG); toast.show(); }
MainActivity.this está diciendo "Ninguna instancia de inclusión del tipo MainActivity es accesible en alcance." No estoy seguro de qué pasar como un contexto en su lugar.
Gracias
- ¿Seguro para AsyncTask interno para acceder a los campos de miembros privados de la clase Activity?
- Descargar un archivo con Android y mostrar el progreso en un ProgressDialog
- Cómo utilizar Toast en ASyncTask / onPostExecute con cadena de recursos?
- utilizar AsyncTask para mostrar datos en ListView
- ¿Se está destruyendo la actividad porque la orientación ha cambiado o porque la aplicación se está cerrando?
- OnPostExecute en AsyncTask cancelado
- Omitió 60 cuadros! La aplicación puede estar haciendo demasiado trabajo en su hilo principal
- Ejecutar la tarea asíncrona en orden serial en android4.0
Obtenga el objeto Context
llamando a getApplicationContext()
de MainActivity
y pasarlo como un parámetro a su AsyncTask
. Como EboMike ha señalado, MainActivity.this
sólo funcionaría si su AsyncTask
era una clase interna.
Si no es una clase interna declarada en el punto de uso, entonces MainActivity.this
es probable que esté fuera del alcance. La única manera de solucionar el problema es subclasificar AsyncTask
y cambiar el constructor para aceptar una variable de contexto para que pueda establecerla en su clase personalizada y utilizarla de métodos. Usar getApplicationContext
podría funcionar tan bien pero no estoy seguro de cómo se comportará.
No puede hacer esto en onProgressUpdate()
. Al menos no de esta manera. Si Eclipse le da este error, es porque MainActivity.this es irresoluble para él. ¿Por qué? Porque no está en el subproceso de interfaz de usuario, por lo que lo que hace no es seguro para subprocesos, porque no debe tener acceso a la interfaz de usuario desde otro subproceso.
En primer lugar, y como se dijo antes, debe escribir un constructor teniendo un contexto y guardarlo en una variable global, por lo que es accesible en todas partes dentro de la clase. A continuación, para acceder a la interfaz de usuario de forma segura, utilice uno de los siguientes:
Activity.runOnUiThread(Runnable) View.post(Runnable) View.postDelayed(Runnable, long)
Ésos son thread-safe.
Saludos
- Icono de menú Confusión – ¡Son demasiado grandes!
- La barra de estado se muestra en android cuando el teclado está visible