请先参阅我的上篇文章:
解析数据帧 android蓝牙数据帧解析 物联网数据帧解析
本篇文章主要是针对数据帧解析而做的小工具,.本篇可以说是2.0版
主要解决一个问题:把写死的截取位置变成动态获取的位置,能够做到即使修改协议帧也能少改代码,快速更改。
例如
原来写String subdata = data.substring(2,4)
@Field(value=ORI,location=1)
现在String subdata;
本次升级:
1:优化代码,去除冗余
2:属性值的解析类型,使用注解,名称为value的值,取消原来属性的默认值
3:使用抽象方法返回值,替代原来主动给Pattern 和 ori_data赋值
本篇文章主要是针对数据帧解析而做的小工具,.本篇可以说是2.0版
主要解决一个问题:把写死的截取位置变成动态获取的位置,能够做到即使修改协议帧也能少改代码,快速更改。
例如
原来写String subdata = data.substring(2,4)
@Field(value=ORI,location=1)
现在String subdata;
本次升级:
1:优化代码,去除冗余
2:属性值的解析类型,使用注解,名称为value的值,取消原来属性的默认值
3:使用抽象方法返回值,替代原来主动给Pattern 和 ori_data赋值
有了以上的优化,编写解析的bean会更清晰明了.
使用方法如下:
package com.gprs.blue.bean.frame.receive;
import android.support.annotation.StringDef;
public class TestBean extends BaseHarvesterBean<TestBean> {
@FieldMeta1(location = 2,value = ORI)
public String data1;
@FieldMeta1(location = 6,value = BCD+REVERSE)
public String data2;
@FieldMeta1(location = 3,value = FLOAT1+REVERSE)
public float data3;
@FieldMeta1(location = 4,value = FLOAT1)
public float data4;
@FieldMeta1(location = 5,value = REVERSE+FLOAT2)
public int data5;
@Override
public String getPattern() {
return "111122334455557788999999";
}
@Override
public TestBean mappingData() {
return TestBean.this;
}
public TestBean(String data) {
super(data)
}
public String toStrings() {
return "TestBean{" +
"data1='" + data1 + '\'' +
", data2='" + data2 +
", data3=" + data3 +
", data4=" + data4 +
", data5=" + data5 +
'}';
}
public static void main(String[] args) {
System.out.println(new TestBean("0e0a0b0c0d01020304050607").toStrings(ONE));
}
}
打印结果如下