Autore Topic: BluetothService ricezione dati a pezzetti  (Letto 540 volte)

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
BluetothService ricezione dati a pezzetti
« il: 06 Dicembre 2012, 10:09:36 CET »
0
Buongiorno a tutti :)
Ho preso come esempio la BluetoothChat e l'hò modificata...Però ho un piccolo problemino...in ricezione quando leggo (anche un semplice array )dal InputStream i dati mi arrivano sempre spezzettati...
Questi dati spezzettati li faccio vedere in un toast...
(Es io ricevo un array di byte... 1^toast---> l'elemento array[0] ,successivamente 2^toast--->elementi array[da 1 fino a n])
altro caso:
(Es io ricevo un array di byte... 1^toast---> l'elemento array[0] ,successivamente 2^toast--->elementi array[da 1 fino a n-2=penultimo elemento],3^toast---> array[n-1=ultimo elemento])
....Ci sto sbattendo la testa da un pò...
Questo è il thread che si occupa della parte di ricezione
Codice (Java): [Seleziona]
private class ConnectedThread extends Thread {
        private final BluetoothSocket mmSocket;
        public final InputStream mmInStream;
        public final OutputStream mmOutStream;
       
       
        public ConnectedThread(BluetoothSocket socket) {
            Log.d(TAG, "create ConnectedThread");
            mmSocket = socket;
            InputStream tmpIn = null;
            OutputStream tmpOut = null;

            // Get the BluetoothSocket input and output streams
            try {
                tmpIn = socket.getInputStream();
                tmpOut = socket.getOutputStream();
            } catch (IOException e) {
                Log.e(TAG, "temp sockets not created", e);
            }
            mmInStream = tmpIn;
            mmOutStream = tmpOut;
        }

        public  void run() {
            Log.i(TAG, "BEGIN mConnectedThread");
            //dichiarazione byte
            byte[] buffer = new byte[1024];
            int bytes,count;
            String a;
            // Keep listening to the InputStream while connected
            while (true) {
                try {
                    // Read from the InputStream
                        count = buffer.length;
                    bytes = mmInStream.read(buffer, 0, count);
                    // Send the obtained bytes to the UI Activity
                    mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
                    //pulisco il buffer dai dati precedenti
                                        a = buffer.toString();
                    a = "";
                    buffer = new byte[1024];
                        ////////////primo
                } catch (IOException e) {
                    Log.e(TAG, "disconnected", e);
                    connectionLost();
                    break;
                }
            }
        }
        /**
         * Write to the connected OutStream.
         * @param buffer  The bytes to write
         */

        public void write(byte[] buffer) {
                int count=buffer.length;
                int offset=0;
            try {
                mmOutStream.write(buffer, offset, count);
                // Share the sent message back to the UI Activity
                mHandler.obtainMessage(BluetoothChat.MESSAGE_WRITE, buffer.length, -1, buffer).sendToTarget();
            } catch (IOException e) {
                Log.e(TAG, "Exception during write", e);
            }
        }
        public void cancel() {
            try {
                mmSocket.close();
            } catch (IOException e) {
                Log.e(TAG, "close() of connect socket failed", e);
            }
        }
    }
 }
Questa invece è la parte in cui il MainActivity riceve e elabora le info ricevute
Codice (Java): [Seleziona]
 case MESSAGE_READ:
                        int i=0,lung;
                        System.gc();
                      //leggo buffer
                       readBuf = (byte[]) msg.obj;
                      //lunghezza risposta
                       lung=msg.arg1;
                      //variabili appoggio
                      String pass1=null;
                      int pass2=0;
                      byte finale=0;
                      listening="";
                      for(i=0;i<=lung-1;i++){
                          pass1=""+readBuf[i];
                          pass2=Integer.parseInt(pass1);
                          finale=(byte)pass2;
                          listening=listening+finale+"  ";
                      }
                       
                        Toast.makeText(getBaseContext(),"|-->   "+listening,Toast.LENGTH_SHORT).show();    
                break;
« Ultima modifica: 06 Dicembre 2012, 10:14:19 CET da MisterAnt »
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?

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:BluetothService ricezione dati a pezzetti
« Risposta #1 il: 06 Dicembre 2012, 11:24:16 CET »
+1
La ricezione è asincrona per natura, normale siano spezzettati. Devi fare tu in modo da ricomporli secondo la logica che ti serve, per esempio se fosse una chat accumuleresti caratteri sino alla ricezione di un "a-capo" e poi li visualizzeresti.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline MisterAnt

  • Utente normale
  • ***
  • Post: 272
  • Respect: +4
    • IlSikano
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4 Active,Galaxy SIII I9300, Galaxy Tab GT-P5100
  • Play Store ID:
    MisterAnt
  • Sistema operativo:
    Ubuntu 12.04/Winzoz 7/Winzoz xp
Re:BluetothService ricezione dati a pezzetti
« Risposta #2 il: 06 Dicembre 2012, 11:28:20 CET »
0
Grazie mille :)
Se le zampe del coniglio sono così fortunate, che fine ha fatto il coniglio?