Skocz do zawartości

Aplikacja zawiesza się podczas czyszczenia StringBuffer.


asm

Recommended Posts

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;
                }
            }
        }

 

Link do komentarza
Udostępnij na innych stronach

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)
Link do komentarza
Udostępnij na innych stronach

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 ?
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...