• 读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~

  • 相关阅读:
    非阻塞式线程安全列表-ConcurrentLinkedDeque
    计数器
    Linux 查看服务器内存使用情况
    Oracle to_date, to_timestamp
    Hibernate session.flush() 使用
    阿里规约认证(题库附答案)
    多态性
    Java数据类型
    String类特点分析
    数组的定义
  • 原文地址:https://www.cnblogs.com/fishbone-lsy/p/4909038.html
Copyright © 2020-2023  润新知