Android 台灣中文網

標題: 將接收到的資料放入陣列卻會遺失 [打印本頁]

作者: kansas73    時間: 2013-10-6 11:46
標題: 將接收到的資料放入陣列卻會遺失
本帖最後由 kansas73 於 2013-10-7 21:14 編輯

從手機接收藍芽送出來的資料
然後將之一一放進陣列
按下按鈕後開始讀取
然後顯示在各自的textview
結果發生悲劇
data[0]的資料是64
data[1]的資料是02
data[2]=00
data[3]=2B
.
.
.
可是當一按下去textview1的確會短暫顯示出64
結果下一秒就會被覆寫成02
然後後面的陣列就會全部往前移
變成data[0]=02、data[1]=00、data[2]=2B...全部往前
之後我在按下讀取資料的按紐
textview1就會先顯示出64然後馬上會跳回顯示02
可是其他的陣列就會全部往前不變了data[1]就會變成data[2]的資料
data[2]就會變成data[3]的資料
求解謝謝 拜託各位大大
已經研究了好幾天找不出問題
====CODE如下======
private class SppReceiver extends Thread{           
             private InputStream input=null;
   
             public SppReceiver(InputStream in){
                     input = in;
                     Log.i(tag, "SppReceiver");
             }
             /* 接收SPP訊息...*/
             public void run(){                    
                     byte[] data  = new byte[1024];
                     int length;  
                     short tmp[] = new short [20];
                     double vo;
                     if (input == null){
                             Log.d(tag, "InputStream null");
                             return;
                     }
                     while (true){
                             try{                 
                                     Thread.sleep(500);
                                     length=input.read(data);                                   
                                     tmp[0]=(short) (0xff & data[0]);
                                     tmp[1]=(short) (0xff & data[1]);
                                     tmp[2]=(short) (0xff & data[2]);
                                     tmp[3]=(short) (0xff & data[3]);
                                     tmp[4]=(short) (0xff & data[4]);
                                     tmp[5]=(short) (0xff & data[5]);
                                     tmp[6]=(short) (0xff & data[6]);
                                     tmp[7]=(short) (0xff & data[7]);
                                     tmp[8]=(short) (0xff & data[8]);
                                     tmp[9]=(short) (0xff & data[9]);
                                     tmp[10]=(short) (0xff & data[10]);
                                     tmp[11]=(short) (0xff & data[11]);
                                     tmp[12]=(short) (0xff & data[12]);
                                     vo =0.01*( (tmp[7]*256) + tmp[8] );
                                     Log.i(tag, "SPP receiver");
                                     if (length>0){
                                             //Log.i(tag,"R: "+ new String(data,0,length, "ASCII")+"
");                                         
                                             msg=Double.toString(vo);
                                             msg1=Integer.toString(tmp[0],0);
                                             msg2=Integer.toString(tmp[1]);
                                             msg3=Integer.toString(tmp[2]);
                                             msg4=Integer.toString(tmp[7]);
                                             msg5=Integer.toString(tmp[8]);
                                             msgetr=Integer.toHexString(data[0]);
                                             btHandler.sendEmptyMessage(0);//將所有要顯示的訊息都丟去btHandler
                                     }
                             }catch (Exception e){//IOException e
                                     Log.e(tag, "SppReceiver_disconnect");
                                     disconnect();                                 
                             }
                     }             
                     }
     }
     /*將訊息顯示再Textview中畫面*/
     Handler btHandler = new Handler(){
            public void handleMessage(Message m){
                    msg.length();
                    msgVolText.setText(msg+"v");
                    msgCurText.setText(msg1);
                    msgFreText.setText(msg2);
                    msgPFText.setText(msg3);
                    msgAcPText.setText(msg4);
                    msgApPText.setText(msg5);
                    msgETR.setText(msgetr);
            }
     };
作者: xjxuvup    時間: 2013-10-6 23:27
code貼出來大家幫你查
都沒code也看不出個所以然吧
作者: kansas73    時間: 2013-10-7 21:12
to xjxuvup
不好意思忘記貼上code馬上補上謝謝您
private class SppReceiver extends Thread{           
             private InputStream input=null;
   
             public SppReceiver(InputStream in){
                     input = in;
                     Log.i(tag, "SppReceiver");
             }
             /* 接收SPP訊息...*/
             public void run(){                    
                     byte[] data  = new byte[1024];
                     int length;  
                     short tmp[] = new short [20];
                     double vo;
                     if (input == null){
                             Log.d(tag, "InputStream null");
                             return;
                     }
                     while (true){
                             try{                 
                                     Thread.sleep(500);
                                     length=input.read(data);                                   
                                     tmp[0]=(short) (0xff & data[0]);
                                     tmp[1]=(short) (0xff & data[1]);
                                     tmp[2]=(short) (0xff & data[2]);
                                     tmp[3]=(short) (0xff & data[3]);
                                     tmp[4]=(short) (0xff & data[4]);
                                     tmp[5]=(short) (0xff & data[5]);
                                     tmp[6]=(short) (0xff & data[6]);
                                     tmp[7]=(short) (0xff & data[7]);
                                     tmp[8]=(short) (0xff & data[8]);
                                     tmp[9]=(short) (0xff & data[9]);
                                     tmp[10]=(short) (0xff & data[10]);
                                     tmp[11]=(short) (0xff & data[11]);
                                     tmp[12]=(short) (0xff & data[12]);
                                     vo =0.01*( (tmp[7]*256) + tmp[8] );
                                     Log.i(tag, "SPP receiver");
                                     if (length>0){
                                             //Log.i(tag,"R: "+ new String(data,0,length, "ASCII")+"
");                                         
                                             msg=Double.toString(vo);
                                             msg1=Integer.toString(tmp[0],0);
                                             msg2=Integer.toString(tmp[1]);
                                             msg3=Integer.toString(tmp[2]);
                                             msg4=Integer.toString(tmp[7]);
                                             msg5=Integer.toString(tmp[8]);
                                             msgetr=Integer.toHexString(data[0]);
                                             btHandler.sendEmptyMessage(0);//將所有要顯示的訊息都丟去btHandler
                                     }
                             }catch (Exception e){//IOException e
                                     Log.e(tag, "SppReceiver_disconnect");
                                     disconnect();                                 
                             }
                     }             
                     }
     }
     /*將訊息顯示再Textview中畫面*/
     Handler btHandler = new Handler(){
            public void handleMessage(Message m){
                    msg.length();
                    msgVolText.setText(msg+"v");
                    msgCurText.setText(msg1);
                    msgFreText.setText(msg2);
                    msgPFText.setText(msg3);
                    msgAcPText.setText(msg4);
                    msgApPText.setText(msg5);
                    msgETR.setText(msgetr);
            }
     };





歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1