Autore Topic: InputStream non funziona!  (Letto 730 volte)

Offline Bazinga2089

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
InputStream non funziona!
« il: 12 Settembre 2011, 17:09:06 CEST »
0
Ciao a tutti,

mi sono collegato ad un dispositivo in Bluetooth, la connessione è andata bene. Il problema è che quando gli invio un comando so che lo riceve ma se leggo la risposta con una read() si blocca e non mi risponde. Ho utilizzato l'esempio che c'è sul sito ufficiale di Android Developers per connetermi e gestire la connessione.

La read va fatta per forza con un thread?

Perchè invio la mia richiesta al device e poi mi metto in ascolto richiamando una funzione di tipo void.

Grazie a tutti in anticipo!

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:InputStream non funziona!
« Risposta #1 il: 12 Settembre 2011, 17:20:59 CEST »
0
Che non funzioni mi sembra quanto meno azzardato.  :-)

Partiamo dal presupposto che funziona e che c'è qualcosa nella tua applicazione che non va. Puoi postare un po' di codice?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Bazinga2089

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:InputStream non funziona!
« Risposta #2 il: 12 Settembre 2011, 17:33:24 CEST »
0
In effetti hai ragione!!

Allora nell'activity principale c'è un thread che si connette ad un device:
Codice: [Seleziona]
bluetoothSocket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
                                                                               
bluetoothSocket.connect();
Inviarichiesta();

Inviarichiesta è fatta così:

Codice: [Seleziona]
byte[] baComando = new byte[8];
baComando = (byte) 0x32;

OutputStream mmOutStream = bluetoothSocket.getOutputStream();
mmOutStream.write(baWriteCommand);

// poi richiamo funzione di read
readresponse();

la readresponse è fatta così

Codice: [Seleziona]
mmInStream = bluetoothSocket.getInputStream();
                         
                        while (true)
                        {
                                try
                                {
                                        bytes = mmInStream.read(bRead);
                                }
                                catch (IOException ioe2)
                                {
                                        break;
                                }
                        }

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:InputStream non funziona!
« Risposta #3 il: 12 Settembre 2011, 18:05:56 CEST »
0
Temo ci siano un paio di problemi di principio.

Prima di tutto le letture sarebbero da fare in un thread a parte, se vai a vedere la Bluetoothchat negli esempi ufficiali, quella è l'impostazione corretta di base.

Seconda cosa, strettamente correlata all'implementazione in thread dedicato, è che la read da InputStream è bloccante. Cioè, se fai un ciclo infinito che legge, rimarrà sempre bloccato nel ciclo, e per bloccato dico tutta l'applicazione bloccata, se non è in un thread a sé stante. Come nella BluetoothChat, ci vuole un thread a parte che legge continuamente e quando riceve effettivamente dati, si occupa di spedirli al main thread secondo uno dei modi thread-safe.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Bazinga2089

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:InputStream non funziona!
« Risposta #4 il: 12 Settembre 2011, 18:08:29 CEST »
0
Ho provato a creare un thread per la la lettura ma è molto instabile a vole legge e a volte no.. Sai per caso quale puo essere il problema?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:InputStream non funziona!
« Risposta #5 il: 12 Settembre 2011, 18:17:29 CEST »
0
Ho provato a creare un thread per la la lettura ma è molto instabile a vole legge e a volte no.. Sai per caso quale puo essere il problema?

Descrizione del problema un po' generica. Quello che ti posso dire è che l'uso del thread per la lettura è la via corretta, se lo eviti per aggirare difficoltà implementative, non potrai che aumentare le difficoltà. Il consiglio è ovviamente spendere tempo nel far andare la versione a thread.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Bazinga2089

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:InputStream non funziona!
« Risposta #6 il: 12 Settembre 2011, 18:33:05 CEST »
0
Grazie mille.. Seguirò il tuo consiglio!

Offline Bazinga2089

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
Re:InputStream non funziona!
« Risposta #7 il: 13 Settembre 2011, 09:18:24 CEST »
0
Ciao,

ho fatto come dici tu ma adesso inputstream.read() non legge niente.. L'ho messo in un thread a parte.. come faccio?