|
||
|
|
|
|||||||
| 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
|
||||
|
||||
|
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);
}
}
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 |
|
|
|
#2
|
||||
|
||||
|
Bienvenido al fantástico mundo de los Heisenbug
DDAunque 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. |
|
#3
|
||||
|
||||
|
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; } } ![]() Y no acierto a pararlo. como se podria hacer. |
![]() |
Estás aquí
|
||||||
|
||||||