AndroidDev 板


LINE

※ 引述《xezct1213 (xezct)》之銘言: : 大家好,新手發問,請前輩給我意見QQ。 : 問題如題 : 輸入流會不斷丟值 : 例如:556 88 98 98 555 64 87 84 : 其中555是第一個辨識ID,556是第二個辨識ID : 偵測到556這個辨識ID,把接下來的值存入對應陣列 : 偵測到555這個辨識ID,把接下來的值存入對應陣列 : 可以麻煩前輩給我關鍵字搜尋相關應用方法嗎? : 謝謝。 http://pastebin.com/QVb2tM3Z 從程式碼看起來 主要的code就分成五個if (IdCheng = {0,1,2,3,4}) 可以發現裡面都有做一樣的事情 所以可以抽出來減少code的長度 byte[] readBuf = (byte[]) msg.obj; String readMessage = new String(readBuf, 0, msg.arg1); int ConvertMsg = Integer.parseInt(readMessage); 這三行可以從if裡面抽出來 code瞬間少了3*4 = 12行 變成這樣 http://pastebin.com/tcvKLFYi 再來每個if裡面的判斷 皆是在判斷ConvertMsg的值 例如說 if (ConvertMsg == 254) { IdCheng = 2; }else if (ConvertMsg == 253) { IdCheng = 3; }else if (ConvertMsg == 252) { IdCheng = 4; }else { String aaa = readMessage; id1 = (TextView) findViewById(R.id.view_id1); id1.setText(aaa); } 這邊有兩種情況 第一種是ConvertMsg的值只有252,253,254,255四種情形 這種情形就很好解決 (第二種情況就是不只這些值 再做一些處理即可) 可以宣告一個二維陣列 int map[5][4] = { {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4}, {1,2,3,4} }; 或是可改成用迴圈來賦值 for(int i=0;i<5;i++){ for(int j=0;j<4;j++){ map[i][j] = j+1; } } 這樣你的code就可以很方便的改寫為 byte[] readBuf = (byte[]) msg.obj; String readMessage = new String(readBuf, 0, msg.arg1); int ConvertMsg = Integer.parseInt(readMessage); int old_IdCheng = IdCheng; IdCheng = map[IdCheng][ConvertMsg-252]; if(old_IdCheng == IdCheng){ String aaa = readMessage; id1 = (TextView) findViewById(R.id.view_id1); id1.setText(aaa); } 以上是比較通用的方法 但是如果妳資料格式真的長這樣的話 連陣列都不需要 因為觀察後可得ConvertMsg + IdCheng = 256 直接把IdCheng = map[IdCheng][ConvertMsg-252] 那行改成 IdCheng = 256-ConvertMsg; 最後的code http://pastebin.com/EgtyGjWY 如果我沒想錯的話 這段code跟你推文中附上的code應該會跑出一樣的結果 (不過我沒測試過不敢保證) 希望沒有理解錯誤 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.137.127
1F:推 xezct1213:感謝Y大回覆,造福我這種菜逼八的新手QQ 02/24 23:35
2F:推 MetalChao:沒錯, 基本上原原PO的code裡的邏輯可以大幅縮小成Y大寫 02/25 18:54
3F:→ MetalChao:的這樣, 不過個人覺得跑起來應該會不太一樣 02/25 18:55
4F:→ MetalChao:第一點是原原PO的邏輯是,如果是252~255是指定接下來要放 02/25 18:56
5F:→ MetalChao:在哪裡, 然後後面的(非252~255)才是要放進的內容 02/25 18:56
6F:→ MetalChao:例外: 連續兩個相同的 252~255 的值, 則會被當成資料 02/25 18:57
7F:→ MetalChao:但Y大的code裡面 old_IdCheng == IdCheng 02/25 18:59
8F:→ MetalChao:變成只有連續兩個值相同, 才會放進去; 而且有些是資料不 02/25 19:00
9F:→ MetalChao:是 IdCheng, 也要先判斷, 不能直接減 02/25 19:00
10F:→ MetalChao:第二點就是最後要放的 view 應該要根據 IdCheng 決定 02/25 19:01
11F:→ MetalChao:(R.id.view_id1 ~ view_id4) 02/25 19:01
12F:→ MetalChao:另外建議原PO 把 findViewById() 移出這個 loop/event 02/25 19:02
13F:→ MetalChao:事先就把 四個 view 準備好, 不然每一個 byte 來就要做 02/25 19:02
14F:→ MetalChao:一次 findViewbyId(), 效能會很差 02/25 19:03
15F:→ MetalChao:另外要問原原PO進來的資料是 byte values 還是字串? 02/25 19:03
16F:→ MetalChao:看應用很像是 byte values, 可是原原PO的code是把它當成 02/25 19:04
17F:→ MetalChao:字串來轉換, 建議確定一下, 如果真是字串就當我沒說 02/25 19:04
18F:推 xezct1213:感謝M大的指點,我的描述能力太差讓Y大誤解邏輯真是抱歉 02/25 21:49
19F:→ xezct1213:這是我目前修正的程式碼,結合Y大與M大的建議 02/25 21:50
20F:→ xezct1213:http://pastebin.com/dDfSSCvx 02/25 21:50
21F:→ xezct1213:我是直接使用藍牙聊天室範本修改,進來的資料是 02/25 21:54
22F:→ xezct1213:Arduino丟進來的byte數值 02/25 21:55
23F:→ xezct1213:所以說 轉換上建議用byte直接轉換嗎? 02/25 21:56
24F:推 MetalChao:藍牙Andruino這部份我沒概念, 你所列出的code是訊息接收 02/25 22:25
25F:→ MetalChao:端, 那麼重點是要看傳訊息的另一端是如何安排資料的; 02/25 22:25
26F:→ MetalChao:假設傳訊息的一端要送一個byte 0xFF (255), 那麼它是 02/25 22:25
27F:→ MetalChao:如何傳給你呢? 02/25 22:25
28F:→ MetalChao:1. 把 0xFF(255), 轉成十進位的 byte array (中間可能還 02/25 22:26
29F:→ MetalChao: 先轉成string), 變成 byte[] a = { 2, 5, 5 }; 02/25 22:26
30F:→ MetalChao: 再轉型成 msg.obj 送過來? (看你的 code 很像是這樣 02/25 22:26
31F:→ MetalChao: 雖然我覺得有點怪, 而且沒效率) 02/25 22:26
32F:→ MetalChao:2. 傳送端直接把幾個 bytes (如 255, 3, 8) 放進 byte 02/25 22:26
33F:→ MetalChao: 陣列, 變成 byte[] a = { 255, 3, 8 }; 再轉成 02/25 22:26
34F:→ MetalChao:msg.obj 送過來 (個人覺得比較合理); 所以你收到的 02/25 22:27
35F:→ MetalChao:readBuf[] 其實是三個數字(bytes), 而不是表示一個 02/25 22:27
36F:→ MetalChao: byte 的字串, 但如果真是這樣子, 你現在的 code 就會 02/25 22:28
37F:→ MetalChao: 有問題. 02/25 22:28
38F:→ MetalChao:這部份可能你要先確定(傳送端放在 msg.obj 的資料格式) 02/25 22:28
39F:→ MetalChao:(或是上面是1.還是2.), 才有辦法回答你 02/25 22:28
40F:推 xezct1213:M大您好,不好意思最近才測試才有辦法回覆 02/27 07:12
41F:→ xezct1213:目前確定Arduino那邊是您說的第二種方式 02/27 07:13
42F:→ xezct1213:我現在遇到的問題是手機收到的值為ACSII碼 02/27 07:13
43F:→ xezct1213:請問我該怎麼使其轉成 byte原始傳來的值? 02/27 07:14
44F:→ xezct1213:補上伺服器端程式碼 http://pastebin.com/pyu9BTRF 02/27 07:20







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP