Android小工具:利用解构来简化Cursor内容的读取

Cursor这个类是Android开发者难以避免的,比如数据库、ContentResolver内容的读取,但通过这个类读取内容非常的繁琐,针对要读取的每一个字段都会有这样一段代码:

int idIndex = cursor.getColumnIndex("id");  //获取字段对应的列index(列index通常并不需要每次都获取)
if(idIndex >= 0){
                              //判断列index的合法性
    String id = cursor.getString(idIndex);  //获取对应列的内容
}

这种代码基本没法复用,而且还都是纯手工代码,自动生成比较麻烦,我希望可以像用json映射那样,每个字段/列一行代码就完成这个任务,所以本文就仿照以前解构Bundle一样,来解构Cursor(完整实现差不多100行)。

实现效果

MediaStore读取照片为例,先编写内容要映射到的Java数据类(重点在于其中的CursorContract):

public class SystemMedia implements Serializable {
   
    private long id;
    private String data;
    private long size;
    private String displayName;
    private String mimeType;
    private long dateAdded;
    private long dateModified;
    private long bucketId;
    private String bucketDisplayName;
    private String album;
    private int height;
    private int width;
    private int orientation;

    public interface CursorContract {
    //重点:这个类声明映射的合约,需要提供一个同样参数的构造方法以方便使用
        SystemMedia consume(@Key(MediaStore.MediaColumns._ID) long id,
                            @Key(MediaStore.MediaColumns.DATA) String data,
                            @Key(MediaStore.MediaColumns.SIZE) long size,
                            @Key(MediaStore.MediaColumns.DISPLAY_NAME) String displayName,
                            @Key(MediaStore.MediaColumns.MIME_TYPE) String mimeType,
                            @Key(MediaStore.MediaColumns.DATE_ADDED) long dateAdded,
                            @Key(MediaStore.MediaColumns.DATE_MODIFIED) long dateModified,
                            @Key(MediaStore.MediaColumns.BUCKET_ID) long bucketId,
                            @Key(MediaStore.MediaColumns.BUCKET_DISPLAY_NAME) String bucketDisplayName,
                            @Key(MediaStore.MediaColumns.HEIGHT) int height,
                            @Key(MediaStore.MediaColumns.WIDTH) int width,
                            @Key(MediaStore.MediaColumns.ALBUM) String album,
                            @Key(MediaStore.MediaColumns.ORIENTATION) int orientation);
    }

    public SystemMedia
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值