`
heyixian
  • 浏览: 12981 次
社区版块
存档分类
最新评论

Android下Entity封装工具类

阅读更多
翻出大半年前写的代码,还是可以揪出点东西、收获良多,比如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("</").append(netName).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<Entry<Integer, XmlBean>> entrySet = mainBean

                               .getChildren().entrySet();

                      if (annotation.isChildEntity()) {

                          List<BaseEntity> list = new ArrayList<BaseEntity>();

                          for (Entry<Integer, XmlBean> 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<Integer, XmlBean> 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 <T> LinkedList<T> query(BaseEntity baseEntity, Class<T> entityClass,



         String condition) {}
0
0
分享到:
评论

相关推荐

    greenDAO的使用工具类封装

    使用封装工具类:** 在实际应用中,可以直接调用这些封装好的方法进行数据操作,例如: ```java User user = new User(); user.setName("Alice"); user.setAge(25); DaoUtil.saveEntity(user); // 保存用户 List...

    Android HttpClient工具类

    7. **EntityUtils**:一个工具类,用于处理响应实体,如读取响应内容。例如: ```java String responseBody = EntityUtils.toString(response.getEntity()); ``` 8. **HttpContext**:提供了请求执行的上下文...

    Android-HttpClient工具类简单轻松的实现getpostput和delete请求

    接下来,我们创建一个`HttpClientUtil`工具类,该类将封装所有HTTP请求方法。首先,初始化`HttpClient`对象和`HttpGet`、`HttpPost`、`HttpPut`、`HttpDelete`等请求对象,并设置必要的请求头: ```java public ...

    http请求工具类HttpClientUtil,get,post请求(csdn)————程序.pdf

    总结,HttpClientUtil 是一个方便的工具类,封装了 Apache HttpClient 库,简化了 HTTP 请求的发送,特别是对于 GET 和 POST 请求。它使用了 Fastjson 和 Guava 库来处理数据的序列化和集合操作,提高了代码的可读性...

    ShareSDK分享封装好工具

    为了使封装更加完善,你可以在你的项目中创建一个自定义的`ShareManager`类,将上述步骤封装起来,提供简单的调用接口。例如,可以设计一个`shareToPlatform(Platform platform, ShareEntity entity)`方法,使得在...

    Android-基于greenDAO的上层调用封装

    2. **生成DAO**:使用GreenDAO的`Schema`类和`Generator`工具,根据数据模型生成对应的`UserDao`接口和`UserDao_Impl`实现类。`UserDao`提供了增删改查等基本操作方法。 3. **初始化数据库**:在应用启动时,创建并...

    Java读写Excel文件,JXL框架工具类

    本文章要介绍的是一个对JXL框架进行封装,实现读取Excle文件数据并生成相应的Entity对象,实现直接将Entity数据写入到Excellent文件中。 JXLUtil框架功能 1、读取Excle数据,生成相应的Entity 2、将Entity数据...

    android GBK转换为String

    - 可以创建一个工具类,封装上述转换方法,方便在项目中复用。例如,创建一个名为`GBKUtil`的类,包含`gbkToUnicode`和`unicodeToGbk`方法。 了解了这些基础知识后,我们可以分析压缩包中的`GBKTest`文件,它可能...

    android hibernate demo例子

    在Android开发中,Hibernate是一个非常重要的工具,尤其是在处理对象关系映射(ORM)时。Hibernate是一种Java库,它简化了数据库操作,使开发者能够通过面向对象的方式与数据库进行交互,而不是编写大量的SQL语句。...

    Android中的Http通信

    在实际项目中,我们通常会封装一个Http工具类,以处理各种请求并统一异常处理。此外,考虑到网络操作可能在主线程中引起ANR(Application Not Responding),所以要确保所有网络请求都在工作线程中执行,可以使用...

    Android Afinal开发框架详解

    3. **工具类**:Afinal还提供了一些常用的工具类,如日期时间处理、字符串操作等,帮助开发者处理日常开发中的常见问题。 四、Afinal的使用和集成 要使用Afinal,首先需要将其库文件添加到项目的build.gradle文件...

    android采用post方式获取服务器数据

    例如,我们可以将HTTP请求的方法抽象成一个工具类,这样就可以在不同的地方调用这个类来发送请求,而不用每次都重写相同的代码。通过传递参数数组,我们的方法可以支持任意数量的参数传递,这提高了代码的灵活性。 ...

    简单封装的greendao

    2. ** DaoGenerator**:这是一个工具类,用于生成与实体类对应的Dao(数据访问对象)类。开发者只需提供实体类,该工具会自动生成相应的增删改查方法。 3. ** DaoSession**:这是GreenDAO的核心管理类,负责管理所有...

    android 的Greendao使用demo,供初学者使用

    GreenDao提供了生成Java Dao(数据访问对象)类的工具,这些类封装了数据库的CRUD(创建、读取、更新、删除)操作。 二、安装与配置 要使用GreenDao,首先需要在项目的build.gradle文件中添加依赖。在dependencies...

    Android 时光日志个人日程管理源码.rar

    - `java`目录下有多个包,如`com.example.timelog`,这些包组织了类的结构,包含Activity(主界面)、Adapter(数据适配器)、Model(数据模型)和Utils(工具类)等。 - `res`目录则包含了布局文件(`layout`)、...

    Android-使用kotlin开发的仿EMUI备忘录使用ObjectBox框架

    为了提高开发效率,Android Studio提供了ObjectBox插件,可以自动生成实体类的代码,简化数据库的配置,同时提供数据浏览和调试工具。通过插件,开发者可以更轻松地管理和维护ObjectBox数据库。 综上所述,"Android...

    android xUtils 数据库修改之一行代码增删改查

    在实际开发中,为了提高效率和代码可读性,可以创建一些静态方法封装这些操作,形成自己的数据库工具类。例如: ```java public class DBUtil { public static void insert(Context context, MyEntity entity) { /...

    Android数据库应用编程

    在Android中,通常通过继承`SQLiteOpenHelper`类来创建和管理数据库。这个类提供了创建和升级数据库的方法,如`onCreate()`用于首次创建数据库时执行的代码,`onUpgrade()`用于在数据库升级时执行的逻辑。 ```java ...

    Android KJFrame框架

    在KJFrame框架中,模型层通常包含数据访问对象(DAO)和实体类(Entity)。DAO负责与数据库交互,获取或存储数据,而实体类则封装了数据结构和属性。 2. **View(视图)**:视图层是用户界面,用于展示数据和接收...

    AndroidAsyncTaskHttp网络请求Demo

    `AndroidAsyncTaskHttp`是基于Android的`AsyncTask`和`HttpClient`的封装库,它简化了HTTP请求的过程,使得开发者能够更加便捷地进行网络操作。`AsyncTask`是Android提供的一个轻量级机制,用于在后台线程执行耗时...

Global site tag (gtag.js) - Google Analytics