xUtils系列之DbUtils-保存自定义类型

来源:互联网 发布:wifi跑字典软件 编辑:程序博客网 时间:2024/06/05 03:23
在DbUtils中,只支持4中数据类型:
[java] view plaincopy
  1. public enum ColumnDbType {  
  2.   
  3.     INTEGER("INTEGER"), REAL("REAL"), TEXT("TEXT"), BLOB("BLOB");  
  4.   
  5.     private String value;  
  6.   
  7.     ColumnDbType(String value) {  
  8.         this.value = value;  
  9.     }  
  10.   
  11.     @Override  
  12.     public String toString() {  
  13.         return value;  
  14.     }  
  15. }  

而在Java中,我们有8种基本类型,但是我们在使用DbUtils时,都能正确的对这些数据类型进行存取,
这是怎么做到的呢?

通过查看源码发现,com.lidroid.xutils.db.converter包中,定义了一系列的转换器,


这些转换器都实现了ColumnConverter接口,然后在ColumnConverterFactory中对这些装换器进行注册,
这样,DbUtils就知道怎么自动存取这些数据类型了.
所以,如果想DbUtils能保存我们自定义的数据类型,仿照已经实现的转换器即可.


下面是xUtils官方的例子:
当程序退出是,需要保存正在下载文件的数据,其中有一个下载状态,是自定义的枚举类型,

[java] view plaincopy
  1. public enum State {  
  2.     WAITING(0), STARTED(1), LOADING(2), FAILURE(3), CANCELLED(4), SUCCESS(5);  
  3.     private int value = 0;  
  4.   
  5.     State(int value) {  
  6.         this.value = value;  
  7.     }  
  8.   
  9.     public static State valueOf(int value) {  
  10.         switch (value) {  
  11.             case 0:  
  12.                 return WAITING;  
  13.             case 1:  
  14.                 return STARTED;  
  15.             case 2:  
  16.                 return LOADING;  
  17.             case 3:  
  18.                 return FAILURE;  
  19.             case 4:  
  20.                 return CANCELLED;  
  21.             case 5:  
  22.                 return SUCCESS;  
  23.             default:  
  24.                 return FAILURE;  
  25.         }  
  26.     }  
  27.   
  28.     public int value() {  
  29.         return this.value;  
  30.     }  
  31. }  

为了保存这个数据类型,作者在保存数据之前,实现了一个ColumnConverter:

[java] view plaincopy
  1. private class HttpHandlerStateConverter implements ColumnConverter<HttpHandler.State> {  
  2.   
  3.     @Override  
  4.     public HttpHandler.State getFieldValue(Cursor cursor, int index) {  
  5.         return HttpHandler.State.valueOf(cursor.getInt(index));  
  6.     }  
  7.   
  8.     @Override  
  9.     public HttpHandler.State getFieldValue(String fieldStringValue) {  
  10.         if (fieldStringValue == nullreturn null;  
  11.         return HttpHandler.State.valueOf(fieldStringValue);  
  12.     }  
  13.   
  14.     @Override  
  15.     public Object fieldValue2ColumnValue(HttpHandler.State fieldValue) {  
  16.         return fieldValue.value();  
  17.     }  
  18.   
  19.     @Override  
  20.     public ColumnDbType getColumnDbType() {  
  21.         return ColumnDbType.INTEGER;  
  22.     }  
  23. }  

在程序开始的时候,通过ColumnConverterFactory对HttpHandlerStateConverter进行注册:
[java] view plaincopy
  1. ColumnConverterFactory.registerColumnConverter(HttpHandler.State.classnew HttpHandlerStateConverter());  

这样,DbUtils就能自动帮助我们存取自定义类型数据了.

from:  http://blog.csdn.net/androidresearch/article/details/45704077
0 0