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

Respuesta
 
Herramientas
  #1  
Viejo 19/12/15, 20:03:20
Array

[xs_avatar]
josuto59 josuto59 no está en línea
Usuario poco activo
 
Fecha de registro: dic 2015
Mensajes: 10
Tu operador: Movistar

porque la clase ReadInputTask no invoca al metodo onPostExecute

Hola compañeros, que estoy haciendo mal para que la clase ReadInputTask no invoque nunca al metodo onPostExecute, segun android developers debe hacerlo despues de doInBavkground. Os pongo el codigo:

Código:
private class ReadInputTask extends AsyncTask<InputStream, String, String> {

    @Override
protected String doInBackground(InputStream... inps) {
        //String p;
InputStream inputStream = inps[0];
        byte[] buffer = new byte[256];  // buffer store for the stream
int bytes; // bytes returned from read()
while (true) {
            try {
                // Read from the InputStream
bytes = inputStream.read(buffer);
                if (bytes > 0) {// Get number of bytes and message in "buffer"
publishProgress(new String(buffer, 0, bytes, "UTF-8"));
                   // p.concat(byte[]):
}
            } catch (Exception e) {
                // To be done
}
        }
    }

    protected void onProgressUpdate(String... values) {
        String input = values[0];
        appendText(input);
    }

    //@Override
protected void onPostExecute(String... result) {
        loQueSea();
    }
}
Venga, a ver si podeis hecharme una mano y voy acabando el proyecto.
Muchas gracias

Última edición por josuto59 Día 28/12/15 a las 00:32:40.
Responder Con Cita


  #2  
Viejo 19/12/15, 20:05:54
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Porque el doInBackground tiene un while(true) más grande que una casa.
Responder Con Cita
  #3  
Viejo 19/12/15, 20:45:15
Array

[xs_avatar]
josuto59 josuto59 no está en línea
Usuario poco activo
 
Fecha de registro: dic 2015
Mensajes: 10
Tu operador: Movistar

Pense que al igual que invoca a onProgressUpdate llamaria tambien a onPostExecute... (este android me mata).
kriogen, me puedes encauzar un poco en como se podria hacer para que sea llamado el metodo onPostExecute.
Muchas gracias.
Responder Con Cita
  #4  
Viejo 19/12/15, 22:11:38
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
No es Android, es Java, o mejor dicho es programación en general.

El onPostExecute sólo se inicia cuando el doInBackground termina (como su propio nombre indica). Si tienes un while(true) que no se rompe nunca el doInBackground ese bucle se ejecuta sin cesar, y por tanto el doInBackground no termina y el onPostExecute no se ejecuta.

En vez de usar while(true) tendrás que usar una variable que indique si se ha producido lectura o no, o directamente subir la lectura al while y poner ahí la condición.
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 22/12/15, 08:59:25
Array

[xs_avatar]
Braaank Braaank no está en línea
Usuario muy activo
· Votos compra/venta: (2)
 
Fecha de registro: ago 2012
Localización: Madrid
Mensajes: 1,149
Modelo de smartphone: One Plus 3T, iPad Air 32 GB
Tu operador: Orange
Como dicen los compañeros, el método onPostExecute solo se ejecuta cuando termina el doInBackground, si no termina el doInBackground ya sea porque ha lanzado una excepción o tienes un bucle infinito nunca va a ejecutar el onPostExecute, en otras palabras el onPostExecute no ejecutará hasta que el doInBackground ejecute la sentencia "return"


Enviado desde mi iPad utilizando Tapatalk
Responder Con Cita
  #6  
Viejo 28/12/15, 00:31:43
Array

[xs_avatar]
josuto59 josuto59 no está en línea
Usuario poco activo
 
Fecha de registro: dic 2015
Mensajes: 10
Tu operador: Movistar

Bueno, al final lo he solucionado mandando desde arduino un caracter determinado al final del mensaje para que al detectarlo, saber que ha terminado el mensaje y poder seguir ejecutando la app.
No es la forma mas ortodoxa ni la mas elegante, pero mientras me voy empapando de android tirara con esto.
muchas gracias por la ayuda, los comentarios y las criticas (que de todo se aprende).
Por mi el tema queda cerrado.
Responder Con Cita
  #7  
Viejo 28/12/15, 10:36:13
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por josuto59 Ver Mensaje
Bueno, al final lo he solucionado mandando desde arduino un caracter determinado al final del mensaje para que al detectarlo, saber que ha terminado el mensaje y poder seguir ejecutando la app.
No es la forma mas ortodoxa ni la mas elegante, pero mientras me voy empapando de android tirara con esto.
muchas gracias por la ayuda, los comentarios y las criticas (que de todo se aprende).
Por mi el tema queda cerrado.
De hecho es la forma correcta si el tamaño del mensaje es variable, salvo que indiques al principio el número de bytes que se van a enviar.
Responder Con Cita
Respuesta

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



Hora actual: 10:37:14 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2026 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /