Foros del Web » Programando para Internet » Android »

[SOLUCIONADO] Acceder a arrayadapter desde metodo del activity?

Estas en el tema de Acceder a arrayadapter desde metodo del activity? en el foro de Android en Foros del Web. Hola, debo desde diferentes partes llamar a webservices para recuperar objetos JSON. Actualmente ya lo hace, con un Asynctask, sin embargo, como deseo mantener las ...
  #1 (permalink)  
Antiguo 11/07/2014, 14:00
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 5 meses
Puntos: 37
Acceder a arrayadapter desde metodo del activity?

Hola, debo desde diferentes partes llamar a webservices para recuperar objetos JSON.

Actualmente ya lo hace, con un Asynctask, sin embargo, como deseo mantener las llamadas "genericas", he decidido que la carga final a los views se haga desde el activity, para ello documentandome vi que deberia usar una interface para hacer el execute, luego con un "listerner" creado desde un "interface" implementar el metodo final en el activity para q se ejecutara desde el onPostExecute del Asynctask.

El Asynctask ya funca y recupera bien la info, incluso me permite ejecutar el metodo implementado en el activity, sin embargo, el resultado final del webservice que es un array, debo cargarlo al ARRAY ADAPTER que alimeenta a la lista.

El PROBLEMA es que, aunque el metodo se reconoce ya dentro del activity, el ADAPTER NO SE CARGA, manda error como si el adapter no existiera o no se reconociera:

CODIGO DEL ACTIVITY:

Código:
protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_imagenes_prueba1);
		
		lvPhotos = (ListView) findViewById(R.id.lvFotos);
		 
        // Creamos un Adapter estándar de Android.
        lvAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
        lvAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());        

        // Asignamos el Adapter al ListView.
        lvPhotos.setAdapter(lvAdapter);
 
        // Para ver cada foto individual
        // Agrega el listener para el listView de Categorias
        lvPhotos.setOnItemClickListener(this);
        
        // Actualizamos los datos, pasamos el Context para poder mostrar un
        // ProgressDialog durante la carga de datos y el Adapter para
        // actualizarlo.
        String enlace = "http://www.foreverjunior.com/wslive/Service1.svc/123";
        
        ((JSONApplication) getApplication()).getData(this, lvAdapter, enlace);		
        
	}
	
	//
	@Override
    public void tareaCompletada (ArrayList<String> arrayList) {
		            // TODO Auto-generated method stub

     /*      Read the response     */
          //String Response = arrayList.get(0);
		Log.e("activity ImagenesPrueba1", "******* OK OK============en tareaCompletada" );
		Log.e("activity ImagenesPrueba1", "     intentamos meter 1 elemento al adapter" );		
		Log.e("activity ImagenesPrueba1", "     arrayList.size es "+arrayList.size()  );		
		// OK ESTA RECOGIENDO OK LOS VALORES
        // Asignamos el Adapter al ListView.
          for (String tmp : arrayList){
        	  Log.e("activity ImagenesPrueba1", "     OTRA VEZ TMP:" + tmp );
//-------------------------------------
// AQUI MANDA UN ERROR!!!!! (no reconoce el lvAdapter
        	  lvAdapter2.add(tmp);

          }
      	Log.e("activity ImagenesPrueba1", "     PASO 0002");  
        //  lvPhotos.setAdapter(lvAdapter);
  		//lvAdapter.add("Hola999");
    
    }

El error indica:
07-11 14:54:42.315: W/System.err(9878): java.lang.NullPointerException
07-11 14:54:42.315: W/System.err(9878): at com.example.pruebaandroid1.ActivityImagenesPrueba1 .tareaCompletada(ActivityImagenesPrueba1.java:82)


El adapter desde dentro del asynctask si se carga ok.

EL METODO tareaCompletada RECIBE BIEN EL ARRAYLIST x que con un bucle veo qiue si trae valores.
  #2 (permalink)  
Antiguo 11/07/2014, 16:05
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Acceder a arrayadapter desde metodo del activity?

En tu archivo ActivityImagenesPrueba1.java linea 82. Te marca NullPointerException.

Tienes que checar que los objetos que estés usando no sean null.

Otra cosa no necesitas 2 adapters, ni crear uno nuevo para actualizar los datos del listview.
  #3 (permalink)  
Antiguo 11/07/2014, 17:31
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 5 meses
Puntos: 37
Respuesta: Acceder a arrayadapter desde metodo del activity?

Hola, gracias por tu respuesta:

//-------------------------------------
// AQUI MANDA UN ERROR!!!!! (no reconoce el lvAdapter
lvAdapter2.add(tmp);

a) En efecto, no requiero 2 adapters, intente con un 2do para ver si lo reconocia, pero al intentar cargar a cualquiera de ellos no deja cargarlo, la variable "TMP" si tiene valores x que el array si contiene datos.

El caso es que el "lvAdapter" (1 o 2) no se reconocen, marcan en efecto, nulo, el codigo
"public void tareaCompletada"
esta dentro del activity como un metodo, que es parte de una interface para el listener, dicho listener se ejecuta desde el ASYNCTASK.

Dentro del Asynctask SI se carga ok el adapter (cuando lo mando como parametro del execute desde el activity).
Desde al asynctask tambien se esta mandando llamar tambien ok el metodo "tareaCompletada"
El array de valores desde el asynctask si pasa con datos al "tareaCompletada".

Creo que debe ser algo del "scope" del adapter.
  #4 (permalink)  
Antiguo 11/07/2014, 22:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Acceder a arrayadapter desde metodo del activity?

Aquí tienes un ejemplo completamente funcional. Creado con Android Studio.

https://github.com/razpeitia/fwd-android-1104060

  #5 (permalink)  
Antiguo 12/07/2014, 01:40
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 5 meses
Puntos: 37
Respuesta: Acceder a arrayadapter desde metodo del activity?

Muy agradecido por el tiempo y esfuerzo que te tomaste en generar la solucion, aunque estoy con Eclipse tu codigo me permitio seguirlo para ver la causa de mi problema, originado tambien por el debil conocimiento que aun poseo con las activities.

El problema era q el Asynconector no lo lanzo desde la activity principal, sino que instancio otra clase JSONAplication.java que es la q lanzaba la activity, asi:
ACTIVITY--- Clase JSONApp -- Asyncconnector

Al ejecutar desde el Async el metodo de la activity, aunque si llegaba, no reconocia ni el arraylist "mList" como tu ejemplo, ni el adapter, de alli que marcaran nulo.

Finalmente cambie los parametros de llamada de cada clase, en el activity mando ahora el "this", y en el JSONApp puse en la llamada al Asyncconnector el "onResult" (que viene desde el this anterior

de manera que finalmente, ya se ejecuto el metodo del activity, que ya lo hacia, pero tambien, ya reconocio al "mList" que sirve para alimentar el adapter y se desplego finalmente la lista.

Mi intencion es generar clases reusables para la app, ya que debere hacer varias llamadas a los webservices, por ahora, unicamente uso como fuente del adapter el generico ArrayList<string>, pero la siguiente activity que implemetare ya usara un adapter customizado asi que continuare ahora para la fusion que me permita desde otra activity la definicion del adapter customizado y que use las mismas llamadas a JsonApp + Asyncconector.

Vi que en el Asyncconector esta definido CategoryResponse como parametro, lo que personaliza demasiado el asynctask, cuando se trate del adapter customizado, varios:

public class MyTask extends AsyncTask<Void, Void, CategoryResponse> {

WeakReference<RequestCallback> callbackWeakReference;

public MyTask(RequestCallback callback) {
callbackWeakReference = new WeakReference<RequestCallback>(callback);
}


Ya solicitare ayuda en caso de atorarme de nuevo.

Nuevamente Gracias

Etiquetas: androi, app, bar, intent, metodo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:07.