Valor devuelto del método onPostExecute de la clase AsyncTask
Ok así que ahora tengo la Class A
que contiene algunos spinners que los valores serán poblados por la Class B
que extiende AsnycTask
que agarra los valores de spinner de un servicio web. En la clase B logro recuperar los valores, mostrando en un Toast. El problema ahora es cómo puedo pasar los valores de spinner de nuevo a la clase A?
He intentado
- Cómo detener ASyncTask de bloqueo cuando mi actividad cambia o destruye?
- ¿Cuánto tiempo puedo mantener un ContentResolver en un AsyncTask?
- Está utilizando la biblioteca de eventos como Otto o EventBus como una forma recomendada de manejar las relaciones entre Actividades, Fragmentos y subprocesos de fondo
- Utilizar un BroadcastReceiver para iniciar un AsyncTask
- Cómo detener HttpURLConnection conectar en Android
¿Puede OnPostExcecute método en AsyncTask RETURN valores?
Pasando Class A
a Class B
y almacenar el valor en una variable pública de la Class A
como abajo
@Override protected void onPostExecute(String result) { classA.classAvariable = result; }
Sin embargo, cada vez que intento leer la classAvariable
siempre obtengo una NullPointer Exception
. Parece que la variable nunca fue asignada con el resultado. Para fines de legibilidad que necesitaba para separar la Class B
lugar de utilizar como una clase en línea.
¿Alguna idea de mis compañeros programadores Java?
- ¿Cómo puedo dividir la lógica de HttpUrlConnection en varios métodos?
- ¿Es necesario tener acceso a una base de datos SQLite en un AsyncTask?
- AsyncTask no se actualiza en el subproceso de la interfaz de usuario
- Android Sqlite rendimiento
- Cómo manejar un AsyncTask durante la rotación de pantalla?
- La cámara no reemplaza la imagen antigua si cambia la orientación
- Cómo manejar los cambios de orientación de la pantalla cuando hay una asyntax ejecutando con android 4.x
- Simule la red lenta en el simulador de Android
Supongo que usted está tratando de leer la clase de una variable antes de que se está estableciendo .. Intenta hacerlo utilizando callbacks .. en la función de devolución de llamada pasar los valores y actualizar sus hilanderos ..
Puede crear interface
, pasarla a AsyncTask
(en constructor) y, a continuación, llamar al método en onPostExecute
Por ejemplo:
Su interfaz:
public interface OnTaskCompleted{ void onTaskCompleted(values); }
Su Actividad:
public YourActivity implements OnTaskCompleted{ //your Activity YourTask task = new YourTask(this); // here is the initalization code for your asyncTask }
Y su AsyncTask:
public YourTask extends AsyncTask<Object,Object,Object>{ //change Object to required type private OnTaskCompleted listener; public YourTask(OnTaskCompleted listener){ this.listener=listener; } //required methods protected void onPostExecute(Object o){ //your stuff listener.onTaskCompleted(values); } }
Problema aquí es que cuando se ejecuta su AsynchTask, su método doInBackground () ejecutar en el hilo separado y el hilo que han iniciado este AsynchTask avanzar, por lo que los cambios ocurren en su variable por AsynchTask no refleja en el hilo padre (quien declaró este AsynchTask) inmediatamente.
Ejemplo:
class MyAsynchTask { doInbackground() { a = 2; } } int a = 5; new MyAsynchTask().execute();
// aquí sigue siendo un 5
Cree una interfaz como OnCompletRequest()
luego pase a su constructor ClassB y simplemente llame al método dentro de esta interfaz como complete(yourList list)
en el método de onPostExecute(String result)