Devuelve el valor de la clase AsyncTask en el método PostExecute

Ok, ahora tengo la Class A que contiene algunos spinners, los valores serán poblados por la Class B que extiende AsnycTask que toma los valores de spinner de un servicio web. En la clase B logro recuperar los valores, que se muestran en un Toast. El problema ahora es ¿cómo paso esos valores de spinner a la Clase A?

He intentado

¿Puede el método OnPostExcecute en los valores de RETORNO AsyncTask?

pasando Class A a Class B y almacenando el valor en una variable pública de Class A como abajo

 @Override protected void onPostExecute(String result) { classA.classAvariable = result; } 

Sin embargo, cada vez que trato de leer la classAvariable siempre obtengo una NullPointer Exception . Parece que la variable nunca fue asignada con el resultado. Para fines de legibilidad, necesité separar Class B lugar de usar como una clase en línea.

¿Alguna idea de mis compañeros progtwigdores de Java?

Supongo que estás tratando de leer la variable de la clase A antes de que se establezca. Intenta hacerlo usando devoluciones de llamadas. En la función de callback, pasa los valores y actualiza tus spinners.

Puede crear una interface , pasarla a AsyncTask (en constructor) y luego llamar al método en onPostExecute

Por ejemplo:

Su interfaz:

 public interface OnTaskCompleted{ void onTaskCompleted(values); } 

Tu actividad:

 public YourActivity implements OnTaskCompleted{ //your Activity YourTask task = new YourTask(this); // here is the initalization code for your asyncTask } 

Y tu AsyncTask:

 public YourTask extends AsyncTask{ //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); } } 

El problema aquí es que cuando ejecutas tu AsynchTask, su metodo doInBackground () se ejecuta en un subproceso separado y el subproceso que ha iniciado este AsynchTask avanza, por lo tanto, los cambios ocurren en tu variable por AsynchTask no se refleja en el subproceso principal (quien declaró este AsynchTask) inmediatamente.

Ejemplo –

 class MyAsynchTask { doInbackground() { a = 2; } } int a = 5; new MyAsynchTask().execute(); 

// aquí todavía hay 5

Crea una interfaz como OnCompletRequest() luego pasa esto a tu constructor de ClassB y simplemente llama al método dentro de esta interfaz, como complete(yourList list) en el método de onPostExecute(String result)