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

¿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?

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)

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.