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 16/12/15, 00:26:17
Array

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

Cuando acaba de recibir datos un inputStream

Buenas noches.
Pues ahora estoy atascado en como conseguir saber que el imputstream ha terminado de recibir datos del bluetooth para mientras tanto detener la ejecucion del programa y que continue cuando termine la recepcion de datos.
el codigo que tengo es este:

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

    @Override
protected Void doInBackground(InputStream... inps) {
        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"));
                }
            } catch (Exception e) {
                // To be done
}
        }
    }

    protected void onProgressUpdate(String... values) {
        String input = values[0];
        appendText(input);
    }
}
Despues intentarlo de varias formas no logro detectar cuando acaba la recepcion de datos y poder guardarlos en un fichero

Alguna pista?

ah! se me olvidaba, si depurando detengo la ejecucion, dejo que terminen de cargar los datos y despues ejecuto la rutina de guardalos en el fichero, me los guarda perfectamente

muchas gracias. Un saludo
Responder Con Cita


  #2  
Viejo 16/12/15, 00:46:45
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
Bienvenido al fantástico mundo de los Heisenbug DD

Aunque en este caso es bastante común y no se considera como tal, ya que si no cierras de forma correcta un OutputStream (no pones que hace appendText pero imagino que será almacenar en un OutputStream) te puede pasar que los datos no se guarden.

En cuanto a la pregunta en sí, un InputStream no tiene más datos cuando los bytes leídos son 0.

Lo que tienes que asegurarte es que en algún momento le hagas close al OutputStream, porque si no lo haces puedes perder writes, ya que se escriben de forma asíncrona. Si no puedes saber cuando vas a cerrar el fichero lo que tienes que hacer por lo menos es hacer un flush después de una serie de writes, para asegurarte que esos writes se escriben de forma inmediata.
Responder Con Cita
  #3  
Viejo 16/12/15, 01:40:07
Array

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

hola kriogen, el codigo del appendText es:

 Cita:
public void appendText(String data) {
switch (mensaje) {
case "Conexion establecida":

txtHoraSis.setText(txtHoraSis.getText().toString() + data);
txtHoraSis.setTextColor(0xFFFC0808);

txtHoraTlf.setText(tomaHora());
txtHoraTlf.setTextColor(0xFFFC0808);

txtEstado.setText("Conectado");
txtEstado.setTextColor(0xFFFC0808);

break;
case "lista":
bufer = bufer.concat(data);

break;
case "hora":
txtHoraTlf.setText(tomaHora());
txtHoraSis.setText(txtHoraSis.getText().toString() + data);
txtHoraSis.setTextColor(0xFFFC0808);

break;
default:
break;
}
}
El problema lo tengo en el case "lista" tengo que detener el programa hasta que se termine de llenar la variable bufer.
Y no acierto a pararlo.
como se podria hacer.
Responder Con Cita
Respuesta

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



Hora actual: 22:08:29 (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 / 邮件联系 /