Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 22/11/13, 11:25:30
Avatar de EPDPF
EPDPF EPDPF no está en línea
Miembro del foro
Mensajes: 418
 
Fecha de registro: sep 2013
Mensajes: 418
Modelo de smartphone: ONE E1003
Versión de ROM: OxygenOS 2.2.0-X
Tu operador: Amena
Mencionado: 1 comentarios
Tagged: 0 hilos
Problema en AsyncTask en doInBackground

Buenos, quería añadir a mi aplicación un ProgressDialog mientras se realiza una función (que lo que hace es leer los datos de dos páginas php). El caso es que la función que se encarga de leer los datos de php funcionan perfectamente, pero a la hora de meterlo en la clase AsyncTask que he creado, cuando ejecuto la aplicación me da error en la función doInBackground, es decir que la función de leer los datos de php que se tendría que hacer en segundo plano, mientras se ejecuta me da error.

Os dejo el código a ver si veis algún fallo, ya que yo estoy empezando en estoy y ando un poco verde.

Esta es la clase que depende de AsyncTask

Código:
class asynclogin extends AsyncTask < Void, Void, Void >{
		 


		protected void onPreExecute() {
	        	//para el progress dialog
	            pDialog = new ProgressDialog(User.this);
	            pDialog.setMessage("Cargando datos...");
	            pDialog.setIndeterminate(false);
	            pDialog.setCancelable(false);
	            pDialog.show();
	        }
		
		@Override
		  protected Void doInBackground(Void... params)  {
			// TODO Auto-generated method stub
			View v = null;
			leerdatos(v); //El código de esta función lo he puesto abajo.
			return null;

		}
	 
	       
			/*Una vez terminado doInBackground segun lo que halla ocurrido 
			pasamos a la sig. activity
			o mostramos error*/
	        protected void onPostExecute(String result) {

	           pDialog.dismiss();//ocultamos progess dialog.
	           Log.e("onPostExecute=",""+result);
	           
	           
			
	        }

			
	 
	 }


} 

   
     
    //-----------------------------------------------------------------------
Esta es la función a la que se llama en AsyncTask en doInBackground:

Código:
public void leerdatos (View v) {
		 
		    
		 Leer leernoti = new Leer();
	     String txtnoti = leernoti.post("urlnoti");

	     TextView tnoti = (TextView)findViewById(R.id.textNoti);
	     tnoti.setText(txtnoti);	
	       
	     Leer leersaldo = new Leer();
	     String txtsaldo = leersaldo.post("urlconta");

	     TextView tsaldo = (TextView)findViewById(R.id.textConta);
	     tsaldo.setText(txtsaldo);
	
		 
		 
	 }
Muchas gracias de antemano ;)

Última edición por EPDPF Día 22/11/13 a las 11:32:34
Responder Con Cita


  #2  
Viejo 22/11/13, 13:09:21
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Varias cosas:

1) El problema lo más probable es que esté en el método post de la clase Leer, pero como no has puesto el código no podemos saberlo. De todas formas debería indicartelo en el LogCat.

2) No puedes hacer un setText dentro de un método al que se llame desde onBackground, en este caso, en leerdatos. Ya que estás actualizando una vista desde un hilo que no es el principal. No es que no puedas, es que no debes, porque lo que va a ocurrir es que no se va a actualizar. Pero si es impepinable hacerlo ahí al final del método hazle un postInvalidate() a los 2 TextView. O ejecuta el setText dentro de un runOnUIThread.

3) El doInBackground debería devolver un String, porque es el parámetro que tiene como entrada el onPostExecute, y nunca tendría que devolver NULL, porque ese parámetro lo estás usando en el Log del onPostExecute.

Resuelve el 2 y el 3 a ver si así se arregla, pero sigo pensando que el problema está en el 1.

Y una cosa tonta, ¿Por qué le pasas una View a leerdatos si después no la usas?
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 22/11/13, 14:04:44
Avatar de EPDPF
EPDPF EPDPF no está en línea
Miembro del foro
Mensajes: 418
 
Fecha de registro: sep 2013
Mensajes: 418
Modelo de smartphone: ONE E1003
Versión de ROM: OxygenOS 2.2.0-X
Tu operador: Amena
Mencionado: 1 comentarios
Tagged: 0 hilos
Cita:
Originalmente Escrito por kriogeN Ver Mensaje
Varias cosas:

1) El problema lo más probable es que esté en el método post de la clase Leer, pero como no has puesto el código no podemos saberlo. De todas formas debería indicartelo en el LogCat.

2) No puedes hacer un setText dentro de un método al que se llame desde onBackground, en este caso, en leerdatos. Ya que estás actualizando una vista desde un hilo que no es el principal. No es que no puedas, es que no debes, porque lo que va a ocurrir es que no se va a actualizar. Pero si es impepinable hacerlo ahí al final del método hazle un postInvalidate() a los 2 TextView. O ejecuta el setText dentro de un runOnUIThread.

3) El doInBackground debería devolver un String, porque es el parámetro que tiene como entrada el onPostExecute, y nunca tendría que devolver NULL, porque ese parámetro lo estás usando en el Log del onPostExecute.

Resuelve el 2 y el 3 a ver si así se arregla, pero sigo pensando que el problema está en el 1.

Y una cosa tonta, ¿Por qué le pasas una View a leerdatos si después no la usas?
Muchas gracias por contestar compañero. Lo del View se me ha colado . La función Leer funciona bien porque la he probado fuera de la class de AsyncTask y funciona. El problema va a ser el punto 2) y 3) voy a revisarlo y te comento.

Muchas gracias de nuevo tio
Responder Con Cita
  #4  
Viejo 22/11/13, 15:11:21
Avatar de EPDPF
EPDPF EPDPF no está en línea
Miembro del foro
Mensajes: 418
 
Fecha de registro: sep 2013
Mensajes: 418
Modelo de smartphone: ONE E1003
Versión de ROM: OxygenOS 2.2.0-X
Tu operador: Amena
Mencionado: 1 comentarios
Tagged: 0 hilos
Solucionado he ejecuta el setText dentro de un runOnUIThread, y ya me funciona.

Muchas gracias compañero
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 21:44:44 (GMT +2)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007