Soru & Cevap

Neden buffer'dan veri okuyamıyorum ...

10.04.2017 - 02:29

HTerm'den inputu 'a' olarak gönderiyorum fakat android tablet ekranından output ' Incoming message = [B@411149f8 ' olarak görülüyor. 

public void TestSerialllll(View view) throws InterruptedException, IOException {

    byte[] PrintBuffer ;
    PrintBuffer = new byte[2048];
    byte res = ReadSerialData(PrintBuffer , (byte)PrintBuffer.length);

    if (res == 0) {

       text2.setText("Incoming message = " + PrintBuffer);

    }
}

private byte ReadSerialData(byte[] buffer , int len){

    if (sDriver == null) {
        mTitleTextView.setText("No serial device.");
    } else {

        try {
            sDriver.open();
            sDriver.setParameters(115200, 8, UsbSerialDriver.STOPBITS_1, UsbSerialDriver.PARITY_NONE);

            sDriver.read(buffer, 2000);
            len = buffer.length;

        } catch (IOException e) {
            Log.e(TAG, "Error setting up device: " + e.getMessage(), e);
            mTitleTextView.setText("Error opening device: " + e.getMessage());
            try {
                sDriver.close();
            } catch (IOException e2) {
                // Ignore.
            }
            sDriver = null;
            return 1;
        }
        mTitleTextView.setText("Serial device: " + sDriver.getClass().getSimpleName());
    }

    return 0;
}

 

3 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user gmyucalfarukeren
gmyucalfarukeren
22.02.2023 - 01:44

Merhabaa Akın! Buffer'dan veri okuyamamanızın sebebi, byte dizisi içindeki verilerin doğru bir şekilde karakterlere dönüştürülmemiş olmasıdır. PrintBuffer byte dizisini doğrudan setText() metoduna göndermek, karakter dizisi (String) formatında olmayan ve doğru bir şekilde yorumlanamayan verileri gösterir

Bu nedenle, byte dizisini doğru bir şekilde karakter dizisine dönüştürmek için String sınıfının constructor'ına byte dizisini parametre olarak geçirmeniz gerekir

Ayrıca, sDriver.read() metodunun, verileri okumak için belirlenen maksimum boyut olan len parametresi ile çağrılması gerektiğini de belirtmek isterim. Aşağıdaki değişikliklerle TestSerialllll fonksiyonunu düzeltebilirsiniz

 

public void TestSerialllll(View view) throws InterruptedException, IOException {
    byte[] PrintBuffer = new byte[2048];
    byte res = ReadSerialData(PrintBuffer, PrintBuffer.length);

    if (res == 0) {
        String incomingMessage = new String(PrintBuffer, 0, PrintBuffer.length);
        text2.setText("Incoming message = " + incomingMessage);
    }
}