asm Napisano Grudzień 25, 2014 Zgłoś Udostępnij Napisano Grudzień 25, 2014 Próbuję napisać aplikację która będzie odbierała dane z bluetooth HC-05, wszystko by było dobrze, ale aplikacja zawiesza się gdy czyści bufor. Gdy zakomentuję linijkę czyszczenia bufora aplikacja się nie zawisza. W czym tkwi problem. public void run() { byte[] buffer = new byte[1024]; int bytes; //final StringBuilder sBuffer = new StringBuilder(""); final StringBuffer sBuffer = new StringBuffer(""); while (true) { try { // Read from the InputStream bytes = mmInStream.read(buffer); if(bytes > 0) { byte[] newbuffer = new byte[bytes]; for(int i = 0; i < bytes; i++) newbuffer[i] = buffer[i]; final String data2 = new String(newbuffer, "US-ASCII"); handler.post(new Runnable() { public void run() { if(data2.indexOf('>')==-1) { sBuffer.append(data2); } else { sBuffer.append(data2); String data=new String(sBuffer); data=data.substring(data.indexOf('<')+1,data.indexOf('>')); String[] lista = data.split("#"); tvVoltage.setText(" "); tvVoltage.setText(data); sBuffer.delete(0, sBuffer.length()); // Gdy zakomentuję tę linię aplikacja nie zawiesza się } } }); } } catch (IOException e) { Log.e("BT", "watcher", e); break; } } } Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Bartosz Wójcik Napisano Grudzień 26, 2014 Zgłoś Udostępnij Napisano Grudzień 26, 2014 Spróbuj sBuffer.setLength(0); Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
asm Napisano Grudzień 26, 2014 Autor Zgłoś Udostępnij Napisano Grudzień 26, 2014 Też się zawiesza. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Bartosz Wójcik Napisano Grudzień 26, 2014 Zgłoś Udostępnij Napisano Grudzień 26, 2014 A jaki jest komunikat błędu? Co pod debuggerem widzisz? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
asm Napisano Grudzień 26, 2014 Autor Zgłoś Udostępnij Napisano Grudzień 26, 2014 Chodzi o logcat? 12-26 20:12:30.648: W/dalvikvm(5891): threadid=1: thread exiting with uncaught exception (group=0x40018578) 12-26 20:12:30.656: E/AndroidRuntime(5891): FATAL EXCEPTION: main 12-26 20:12:30.656: E/AndroidRuntime(5891): java.lang.StringIndexOutOfBoundsException 12-26 20:12:30.656: E/AndroidRuntime(5891): at java.lang.String.substring(String.java:1651) 12-26 20:12:30.656: E/AndroidRuntime(5891): at com.example.bt1.MainActivity$ConnectedThread$2.run(MainActivity.java:240) 12-26 20:12:30.656: E/AndroidRuntime(5891): at android.os.Handler.handleCallback(Handler.java:587) 12-26 20:12:30.656: E/AndroidRuntime(5891): at android.os.Handler.dispatchMessage(Handler.java:92) 12-26 20:12:30.656: E/AndroidRuntime(5891): at android.os.Looper.loop(Looper.java:130) 12-26 20:12:30.656: E/AndroidRuntime(5891): at android.app.ActivityThread.main(ActivityThread.java:3687) 12-26 20:12:30.656: E/AndroidRuntime(5891): at java.lang.reflect.Method.invokeNative(Native Method) 12-26 20:12:30.656: E/AndroidRuntime(5891): at java.lang.reflect.Method.invoke(Method.java:507) 12-26 20:12:30.656: E/AndroidRuntime(5891): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 12-26 20:12:30.656: E/AndroidRuntime(5891): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625) 12-26 20:12:30.656: E/AndroidRuntime(5891): at dalvik.system.NativeStart.main(Native Method) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Jin Napisano Grudzień 31, 2014 Zgłoś Udostępnij Napisano Grudzień 31, 2014 Co to jest handler i dlaczego wątek do niego jest deklarowany w kółko do wystąpienia wyjątku ? Skąd wiesz że nie deklarujesz nowego wątku dla handler.post zanim jeszcze ten ostatni się skończył ? Skąd wiesz że data2 nie jest ponownie wypełniana przez newbuffer zanim zostanie dopisana do sBuffer w wątku dla handlera ? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Mateusz Napisano Styczeń 1, 2015 Zgłoś Udostępnij Napisano Styczeń 1, 2015 Może po prostu użyj StringBuildera (jest praktycznie tym samym, lecz nowszy i z obsluga wielowatkowego dostepu). I bez używania final. Niech garbage collector sobie go zmiecie. EDIT: Ewentualnie jest to problem z tym, że buffer jest pusty, dodaj if'a Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.