zoukankan      html  css  js  c++  java
  • 读ActiveAndroid源码(五)

    前面几篇,断断续续地囫囵吞枣地读了ActiveAndroid的部分源码,大致了解了ActiveAndroid的注解反射原理。其中很多细节还不算很清楚,加之内容非常多,为了更好地阅读接下来的内容,在此对前面阅读的部分作一个总结。

    在之前的几篇中,重点阅读了ActiveAndroid中的三个类:Conguration , ModelInfo , TableInfo。下面将对这三个类的作用做一个简单地总结:

    一、Conguration

      先看一下Conguration的成员变量: 

        public final static String SQL_PARSER_LEGACY = "legacy";
        public final static String SQL_PARSER_DELIMITED = "delimited";
    
        //////////////////////////////////////////////////////////////////////////////////////
        // PRIVATE MEMBERS
        //////////////////////////////////////////////////////////////////////////////////////
    
        private Context mContext;
        private String mDatabaseName;
        private int mDatabaseVersion;
        private String mSqlParser;
        private List<Class<? extends Model>> mModelClasses;
        private List<Class<? extends TypeSerializer>> mTypeSerializers;
        private int mCacheSize;

      其中有,写成常量的SQL解析器

        public final static String SQL_PARSER_LEGACY = "legacy";
        public final static String SQL_PARSER_DELIMITED = "delimited";

      数据库的上下文、

      数据库的名称、

      数据库的版本、

      数据库的解析器、

      数据库中model子类的列表、

      数据库中序列化的列表、

      和缓存大小。

    总体来看,Conguration就是存了整个数据库的基本信息和数据库中有需要保存的类的列表。每次启动地初始化过程都会初始化这个类,并从AndroidManifest和文件中读取它的基本信息。

    二、ModelInfo 

      同样先看一下ModelInfo的成员变量:

        private Map<Class<? extends Model>, TableInfo> mTableInfos = new HashMap<Class<? extends Model>, TableInfo>();
        private Map<Class<?>, TypeSerializer> mTypeSerializers = new HashMap<Class<?>, TypeSerializer>() {
            {
                put(Calendar.class, new CalendarSerializer());
                put(java.sql.Date.class, new SqlDateSerializer());
                put(java.util.Date.class, new UtilDateSerializer());
                put(java.io.File.class, new FileSerializer());
            }
        };

    ModelInfo的成员变量只有两个mTableInfos和mTypeSerializers。

      mTableInfos储存了每个需要储存的类与TableInfo的映射关系。

      mTypeSerializers储存了每个序列化的接口。

      每当用户要对要储存的类进行读/写操作时,就需要从mTableInfos这个map中找到属于自己的TableInfo,然后根据TableInfo中信息进行相关操作。

    三、TableInfo

      TableInfo的成员变量如下:

        private Class<? extends Model> mType;
        private String mTableName;
        private String mIdName = Table.DEFAULT_ID_NAME;
    
        private Map<Field, String> mColumnNames = new LinkedHashMap<Field, String>();

      分别是:

      TableInfo对应的类、

      这个类对应的表名、

      这个表的Id字段名、

      这个类和表中,成员和字段名的对应关系。

      当我们调用要储存的类的相关方法时,这个类就会找到它的TableInfo,然后根据mColumnNames的映射去操作数据库中的对应字段。

    Done~

  • 相关阅读:
    最权威的 Android Oreo 新特性详解
    【送书福利】第一次送书活动(总共10本)
    【资源篇】Python那么火,你还不知道如何人门?
    不忘初心,方得始终 ,让我们一起学习成长,感谢有你!
    搭建环境篇 | 运行第一个Java Web 项目
    为什么我们需要看技术公众号文章?
    手把手教学APK反编译实现源码阅读
    分享一款 Google Pixel 2 独家动态壁纸
    了解CoordinatorLayout,在项目中运用
    jdk 与 jre的区别
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4909038.html
Copyright © 2011-2022 走看看