Forum: PC-Programmierung [Android] BufferedReader/InputStreamReader/Split


von Johnny E. (electricjohnny)


Lesenswert?

Hallo zusammen,

ich möchte eine Android-App auf Basis von "BluetoothChat" realisieren.
https://developer.android.com/samples/BluetoothChat/index.html

Konkret geht es um eine Mikrocontroller-Platine, die über ein
BTM222-Bluetooth-Modul mit einem Tablet kommunizieren soll.

Über Sensoren auf der Platine werden Messwerte aufgenommen und sollen
auf einem Tablet dargestellt werden.

Die Anzeige soll allerdings nicht als einfacher Fließtext erfolgen,
sondern die Messwerte sollen immer an einer bestimmten Stelle in der App
angezeigt werden.

Die Daten, die vom Mikrocontroller kommen, werden als ASCII-Zeichen in 
folgender Form übertragen:

Sensorwert1;Sensorwert2;Sensorwert3;.../CR/LF

";" und "/CR/LF" sollen später als Terminatoren verwendet werden, um die 
einzelnen Werte zu splitten.

Ich möchte nun in der Klasse BluetoothChatService mit einem 
BufferedReader auf dem InputStreamReader mit readLine nach dem /CR/LF 
jede übertragene Zeile abspeichern und per Message an die Klasse 
BluetoothFragment weitergeben.

Da ich bisher kaum Erfahrungen mit Java bzw. App-Programmierung sammeln 
konnte, wäre ich dankbar von euch hilfreiche Tips zubekommen, um das 
zuvor beschriebene umszusetzen.

Die Daten werden im BluetoothChatService in folgenden Abschnitt 
empfangen:
1
public void run() {
2
            Log.i(TAG, "BEGIN mConnectedThread");
3
            byte[] buffer = new byte[1024];
4
            int bytes;
5
6
            // Keep listening to the InputStream while connected
7
            while (true) {
8
                try {
9
                    // Read from the InputStream
10
                    bytes = mmInStream.read(buffer);
11
                    
12
                    // Send the obtained bytes to the UI Activity
13
                    mHandler.obtainMessage(Constants.MESSAGE_READ, bytes, -1, buffer)
14
                            .sendToTarget();
15
                } catch (IOException e) {
16
                    Log.e(TAG, "disconnected", e);
17
                    connectionLost();
18
                    // Start the service over to restart listening mode
19
                    BluetoothChatService.this.start();
20
                    break;
21
                }
22
            }
23
        }


Vielen Dank im Voraus.

von Hans-Georg L. (h-g-l)


Lesenswert?

Du erzeugst dir einen BufferedInputReader und readLine gibt dir einen 
String zurück, den du anstelle von buffer deinem handler übergibst ...

Wo ist jetzt das Problem ?

Wie das genau geht steht in der Doku ...

von Johnny E. (electricjohnny)


Lesenswert?

in Ordnung, also in etwa so:
1
try {
2
                    // Read from the InputStream
3
                    bytes = mmInStream.read(buffer);
4
5
                    
6
                    InputStreamReader ISR = new InputStreamReader(mmInStream);
7
                    BufferedReader BR = new BufferedReader(ISR);
8
                    String Sensordaten = BR.readLine();
9
10
11
                    ***
12
13
14
15
                    // Send the obtained bytes to the UI Activity
16
                    //mHandler.obtainMessage(Constants.MESSAGE_READ, bytes, -1, buffer)
17
                    mHandler.obtainMessage(Constants.MESSAGE_READ, bytes, -1, buffer)
18
                            .sendToTarget();
19
                }

Nur wie Teile an an dieser (***) Stelle den Datenstrom?
Mein Ansatz wäre Sensordaten.split("\r\n");

Nur wie speichere ich das ab, was ich erhalte?

buffer erwartet ja ein byte und keinen String.

von Hans-Georg L. (h-g-l)


Lesenswert?

Lies die Dokumentation !!!

> Nur wie Teile an an dieser (***) Stelle den Datenstrom?
> Mein Ansatz wäre Sensordaten.split("\r\n");
>

1. was macht readLine ?

> Nur wie speichere ich das ab, was ich erhalte?
>
> buffer erwartet ja ein byte und keinen String.

2. Wie kann mHandler Strings verschicken ..

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.