翻出大半年前写的代码,还是可以揪出点东西、收获良多,比如entiy和协议,数据库的绑定

总结一下
在android下面实现的数据entity的封装。


通过对bean进行配置注解,网络交互,数据库的CRUD操作都只要调用统一接口,具体实现都在BaseEntity父类,以下代码是在发送数据组装的具体实现


@AnoDBType(tableName = "e")

public class ReportShow extends BaseEntity {

@AnoDbField(columnName = "a", isPrymaryKey = true)

private int id;

@AnoDbField(columnName = "b")

@AnoNetField(netName = "time")

private String time;

@AnoDbField(columnName = "c")

@AnoNetField(netName = "position")


BaseEntity类的实现:


public class BaseEntity {

public String createXml() {

StringBuilder builder = new StringBuilder();

Field[] declaredFields = this.getClass().getDeclaredFields();

try {

for (Field field : declaredFields) {

field.setAccessible(true);

AnoNetField annotation = field.getAnnotation(AnoNetField.class);

if (annotation != null) {

String netName = annotation.netName();

builder.append("<").append(netName).append(">");

Object object = field.get(this);

if (object != null) {

builder.append(object);

}

builder.append("");

}

}

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

}

return builder.toString();


以下代码是实现解析网络数据的具体实现,resultFilePath 参数是本地xml的地址,因为收到数据包之后,为了分析每一条协议,我把他持久化保存在本地磁盘上面。 解析成entity时候通过注解设置相应的值,并通过递归的方式寻找每一个子项,子项的子项。。并给他们设置值。最终转成entity对象。


public BaseEntity parseXml(String resultFilePath) {

PlusXmlParser xmlParser = new PlusXmlParser(resultFilePath);

XmlBean xmlBean = xmlParser.getRootXmlBean();

return buildEntity(xmlBean);

}

public BaseEntity buildEntity(XmlBean mainBean) {

Field[] declaredFields = this.getClass().getDeclaredFields();

try {

for (Field field : declaredFields) {

field.setAccessible(true);

AnoNetField annotation = field.getAnnotation(AnoNetField.class);

if (annotation != null && annotation.netName().length() > 0) {

String netName = annotation.netName();

Set> entrySet = mainBean

.getChildren().entrySet();

if (annotation.isChildEntity()) {

List list = new ArrayList();

for (Entry entry : entrySet) {

XmlBean value = entry.getValue();

if (value.getName().equals(netName)) {

Class<? extends BaseEntity> childClass = annotation

.childClass();

BaseEntity newInstance = childClass

.newInstance();

BaseEntity buildEntity = newInstance

.buildEntity(value);

list.add(buildEntity);

}

}

field.set(this, list);

} else {

for (Entry entry : entrySet) {

XmlBean value = entry.getValue();

if (netName.equals(value.getName())) {

field.set(this, value.getContent());

}

}

}

} else {

/** 这里是没有配置注解的属性 */

}

}

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();



}

return this;

}



以下是数据库CUID的接口实现,具体代码比较多就不贴上来。因为都是持久化数据,所以这个解析和组装的实现是和网络模块一致的。


public boolean update(BaseEntity entity, BaseEntity alterEntity,String condition) {}



public boolean delete(BaseEntity entity) {}



public boolean insert(BaseEntity baseEntity) {}



public LinkedList query(BaseEntity baseEntity, Class entityClass,


String condition) {}

更多相关文章

  1. Android上使用ASIFT实现对视角变化更鲁棒的特征匹配
  2. android recover 系统代码分析 -- 选择进入
  3. 2020最新Android大厂面试真题大全(附答案)
  4. 为Android系统定制重启功能
  5. Android(安卓)GLES多线程处理
  6. Android(安卓)SeekBar的使用,进度条的另一种实现方式
  7. 应届毕业生Android面试经验小谈
  8. Android(安卓)WebView 调用React Js 代码
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. 1.3 History of Android(安卓)Plug-in Pr
  2. Android(安卓)activity‘s life cycle
  3. android TextView 分散对齐(两端对齐)
  4. Android编程权威指南之Activity的抽象类
  5. 将获取的html源代码格式化输出
  6. Bullet physics 先粘过来后期翻译
  7. Android中Scrollview上滑,顶端部分悬浮
  8. 获取磁盘存储目录
  9. android 状态栏字体颜色设置 黑色 anctiv
  10. android 登陆demo