Notepad_1

 

额滴神呀!第一次写技术博,写博的人伤不起啊,这是第三次写同样的东西,前两次全一不小心双击了浏览器标签关闭掉了。。。试了下IE,发现双击标签不会关闭,以后就用IE来写。

 

当第一次看到Notepad的源码是不知道从哪个文件看起,想了想,界面是跟着数据来的,也就不用急着看;业务逻辑嘛也就是老四样(增删改查),也没什么复杂的,觉得从数据的组织开始看起比较合适。

使用单独的一个类封装数据表字段名、mimeType、URI信息方便修改和管理。

1.  域名AUTHORITY:和普通的html的uri类似,其协议使用的content(content://com.wangwen.provider),它指定了数据在系统中的位置,因为在android中数据都是独享的,要想使用其他应用的数据就需要使用URI进行定位。

2.  CONTENT_TYPE&CONTENT_ITEM_TYPE:是两个mimetype类型,其实也就是个String,它的作用是为了隐式匹配Intent,当发送一个Intent后会进行解析匹配(若是直接Intent则不会进行匹配,直接Intent就是指明了组件名的Intent),在匹配Intent时会根据URI从ContentProvider派生类中调用getType返回mime类型与activity的type进行匹配。第一个表示的是所有记录的mime类型,第二表示某一个的mime类型。

3.  Notes内部类:该类定义了数据表的字段名、数据库URI、数据默认排序方式,此类可以继承BaseColumn,也可以不继承BaseColumn,其实BaseColumn类中只是定义了_ID&_COUNT两个成员,_ID是数据表的主键(必须有主键,当触发onListItemClick时,传入的最后一个long型参数就是数据的ID,只有拿到了数据的ID才能更好的对数据进行操作);当不继承BaseColumn时需要自己手写上值为"_Id"的变量。

 

 

 

package com.wangwen.provider;

import android.net.Uri;
import android.provider.BaseColumns;

public final class Notepad {
    
private Notepad() {
    }

    
public static final String AUTHORITY = "com.wangwen.provider.NotepadProvider";
    
public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.google.note";
    
public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.google.note";
    
    
public static final class Notes implements BaseColumns {
        
public static final Uri CONTENT_URI = Uri.parse("content://"
                
+ AUTHORITY + "/notes");
        
public static final String DEFAULT_SORT_ORDER = "modified DESC";
        
public static final String TITLE = "title";
        
public static final String NOTE = "note";
        
public static final String CREATE_DATE = "created";
        
public static final String MODIFIED_DATE = "modified";
    }
}