¿Puede OnPostExcecute método en AsyncTask RETURN valores?
Estoy desarrollando una aplicación de Android que requiere el uso de AsyncTask para la conexión de red. Lo llamé desde el hilo principal. Así que el método doInBackground se ejecuta y luego vuelve al método onPostExecute . Después de ejecutar el método onPostExecute, quiero devolver un valor a la actividad desde donde fue llamado, ya que tengo que realizar alguna operación en esa actividad particular que requiere el valor devuelto por el método onPostExecute. ¿Cómo puedo solucionar esto? ¿Cómo devuelvo un valor de onPostExecute?
Gracias por adelantado
- Java.net.UnknownHostException: No se puede resolver el host "<url>": ninguna dirección asociada con hostname y End of input en el carácter 0 de
- ¿Debo usar AsyncTask o IntentService para mi aplicación?
- Enfoque eficiente para comprobar continuamente si la conexión a Internet está disponible en Android
- OnCreateView () espera que AsyncTask se ejecute?
- Android: ¿Cómo descargar un archivo .png con Async y configurarlo con ImageView?
- Android cómo esperar a que termine el código antes de continuar
- Cómo restablecer el ListView con el ArrayAdapter después de buscar datos
- Facebook autoriza que no funcione dentro de Android Asynctask o Thread
- AsyncTask, doInBackground nunca se ejecuta en android
- Hacer la tarea de la interfaz de usuario en doinbackground () en Android
- Cómo analizar datos de 2 URL diferentes mediante el método asyncTask
- Las imágenes (base64) no se suben correctamente
- agregar vista (vista de texto) en AsyncTask
AsyncTask, como su nombre indica, se ejecuta de forma asincrónica con el subproceso de UI, el método onPostExecute se llamará en algún momento en el futuro, cuando doInBackground finalizado. No nos importa cuando onPostExecute método será llamado (en realidad no hay manera de decir en el tiempo de construcción del proyecto), lo único que importa es onPostExecute método está garantizado para ser llamado correctamente por el marco subyacente en algún momento en el futuro. Así que el propósito del método onPostExecute es procesar el resultado devuelto desde el subproceso de trabajo, esto es también por qué el único argumento del método onPostExecute es el resultado devuelto por el método doInBackground.
Tengo que realizar alguna operación en esa actividad particular que requiere el valor devuelto por el método onPostExecute. ¿Cómo puedo solucionar esto?
De causa, puede crear algunas variables de instancia (o utilizar el patrón listerner) en la clase de actividad almacenar el resultado cuando se devuelve y listo en el método onPostExecute. El problema es que nunca se sabe cuándo este resultado está listo fuera del método onPostExecute en el tiempo de construcción del proyecto, ya que se determina realmente en el tiempo de ejecución de la aplicación. A menos que escriba algún mecanismo de espera que escuche continuamente el resultado, lo que resulta en sacrificar el beneficio de AsyncTask, por ejemplo, la API incorporada AsyncTask.get () que hace que AsyncTask funcione de forma síncrona con el subproceso de la interfaz de usuario y devuelva el resultado a la actividad.
La mejor práctica es cambiar su diseño y mover el código de operación que requiere el resultado devuelto de AsyncTask en onPostExecute método. espero que esto ayude.
Puede utilizar getter y setter para recuperar el valor de AsyncTask
public class MainActivity extends Activity { public String retunnumfromAsyncTask; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layouttest); new Asyntask(this).execute(); } public class Asyntask extends AsyncTask<Void, Void, String> { private final Context Asyntaskcontext; public Asyntask(Context context){ Asyntaskcontext = context; } @Override protected void onPostExecute(String result) { MainActivity mainactivity = (MainActivity) Asyntaskcontext; mainactivity.retunnumfromAsyncTask = result; super.onPostExecute(result); } } }
Simplemente escriba la clase AsyncTask como clase interna en su actividad y, a continuación, declare el valor que desea devolver como global. ¿Fue de ayuda para ti?
- Error de inicio de sesión de Spotify INVALID_CLIENT: redireccionamiento no válido URI android
- Cómo ejecutar código sólo en cierto nivel de API