Wie nutzt man Inputstream mit Handler

  • Antworten:4
Byakko
  • Forum-Beiträge: 7

17.06.2014, 16:47:26 via Website

Guten Tag,

ich möchte gerne lernen wie man Daten empfängt und diese dann anzeigt über TextView. Ich habe schon viel gelesen jedoch habe ich das einfach nicht verstanden mit Stream und Handler.

Kann mir vielleicht jemand das genauer erläutern? Hier ein ein Code beispiel was ich nicht verstehe.

public void run() {
    int ret = 0;
    byte[] buffer = new byte[16384]; 
    int i;

    while (true) { // read data
        try {
            ret = mInputStream.read(buffer);
        } catch (IOException e) {
            break;
        }

        i = 0;
        while (i < ret) {
            int len = ret - i;
            if (len >= 1) {
                Message m = Message.obtain(mHandler);
                int value = (int)buffer[i];
                // &squot;f&squot; is the flag, use for your own logic
                // value is the value from the arduino
                m.obj = new ValueMsg(&squot;f&squot;, value);
                mHandler.sendMessage(m);
            }
            i += 1; // number of bytes sent from arduino
        }

    }
}
    Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        ValueMsg t = (ValueMsg) msg.obj;
        // this is where you handle the data you sent. You get it by calling the getReading() function
        mResponseField.setText("Flag: "+t.getFlag()+"; Reading: "+t.getReading()+"; Date: "+(new Date().toString()));
    }
};

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

17.06.2014, 17:02:03 via Website

InpüutStream to String:
http://kasperholtze.com/android/android-converting-inputstream-to-string/

Aber dabei ist die Voraussetzung, dass keine Neuen Daten mehr am Stream ankommen.
Bei dir sieht es eher so aus, als wolltest du dauerhaft ankommende Daten verarbeiten, richtig?

Der Handler ist dafür gedacht, deinen String vom "Stream lesethread" in dem Mainthread zu bringen, damit dieser dort angezeigt werden kann.
Hier ( http://developer.android.com/training/multiple-threads/communicate-ui.html ) eine Anleitung.
Du könntest das auch mit Context#runOnUiThread(Runnable r) machen.
Das sorgt für den gleichen Effekt.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Byakko
  • Forum-Beiträge: 7

17.06.2014, 17:29:01 via Website

Vielen Dank für deine Antwort.

Ich möchte die ganze Zeit werte erhalten, diese möchte ich dann anzeigen.

Ich habe mich etwas schlecht ausgedrückt^^
Was ein Inputstream oder ein Handler habe ich verstanden. Jedoch verstehe ich nicht wie das genau funktioniert.

Antworten
Fabian Simon
  • Forum-Beiträge: 359

18.06.2014, 08:24:08 via Website

Was meinst du ? wie du es verwendest oder welche Logik sich dahinter verbirgt ?

Antworten
Byakko
  • Forum-Beiträge: 7

19.06.2014, 00:49:13 via Website

Beides:D

Message m = Message.obtain(mHandler); Was wird hier genau gemacht?

read() gibt ein ein Byte zurück als Integer 0-256. Was bringt ihm die länge zu wissen eher gesagt die größe des wertes und wieso wird diese reduziert?

Antworten