前面几篇,断断续续地囫囵吞枣地读了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~

 

posted on 2015-10-25 16:57  Fishbonell  阅读(187)  评论(0编辑  收藏  举报