一丶概述
半年前做手机投屏功能,要求将同一局域网的设备列表传给前端进行交互,国庆前上线,然而就在测试前一天出问题反映情况是:iOS可以Android不行!Android的问题,加班给我改!
混合开发最最烦的事就是iOS,Android,前端配合开发,连调沟通。
二丶注意点
(1) JSBridge只能传String
查看传值源码
只能传String!!!
切忌勿撕逼
前端要JSON
对不起,我只能传String,我帮你拼接,你那边转。
为什么iOS可以你Android不行呢?
对不起,我只能传String
(2) 切勿在for循环里拼接字符串
拼接局域网内设备列表很容易写这样的代码
/**
* 设备信息传给前端
* @param list
* @return
*/
private String listToJSON(List<TCLDeviceInfo> list) {
if (null != list) {
String tYlist = "";
for (int i = 0; i < list.size(); i++) {
String deviceList = "{" + "\"deviceIP\"" + ":" + " \"" + list.get(i).getIp() + " \"" + ","
+ "\"deviceName\"" + ":" + " \"" + list.get(i).getName() + " \"" + "," + "\"isConnected\"" + ":" + list.get(i).isConnected() + "}";
if (i == 0) {
tYlist = tYlist + deviceList;
} else {
tYlist = tYlist + "," + deviceList;
}
}
LogUtils.d(TAG, "[" + tYlist + "]");
return "[" + tYlist + "]";
} else {
return "";
}
}
功能能实现,但是会被diao
为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接
从结果可以看出,用时从短到长的对比是:
StringBuilder < StringBuffer < concat < + < StringUtils.join
正确写法:
// This is bad
String s = "";
for (int i = 0; i < field.length; ++i) {
s = s + field[i];
}
// This is better
StringBuilder buf = new StringBuilder();
for (int i = 0; i < field.length; ++i) {
buf.append(field[i]);
}
String s = buf.toString();
(1) StringBuffer buf = new StringBuffer();在for循环外
(2).append 替代 +
三丶总结
1.切勿撕逼(浪费时间)
2.string拼接效率
StringBuilder > StringBuffer > concat > + > StringUtils.join