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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP