ContentProvider的使用

来源:互联网 发布:淘宝衣服相同钱不一样 编辑:程序博客网 时间:2024/06/05 05:49
package com.cattsoft.deliersystem.provider;


import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


import com.cattsoft.deliersystem.constants.SQLProviderConstants;


/**
 * 创建数据库的工具类
 * 
 * @author 肖秋
 * 
 */
public class SqliteHelper extends SQLiteOpenHelper implements SQLProviderConstants {


public SqliteHelper(Context context) {
super(context, SQL_NAME, null, 1);
}


@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_DOWNLOAD_FILE_SQL);
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(DELETE_DOWNLOAD_FILE_TABLE);
onCreate(db);
}


}




package com.cattsoft.deliersystem.provider;


import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;


import com.cattsoft.deliersystem.constants.SQLProviderConstants;


/**
 * 文书下载信息内容提供者工具类
 * 
 * @author 肖秋
 * 
 */
public class DownloadFileProvider extends ContentProvider implements
SQLProviderConstants {


private static final int DOWNLOADS = 1;
private static final int DOWNLOAD_ID = 2;


private SqliteHelper helper;


// 定义一个uri的匹配器,用于匹配uri,如果路劲不满足条件,返回-1
private static UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);


static {
matcher.addURI(AUTHORITY + "." + FILE_DOWNLOAD_PATH, FILE_DOWNLOAD_PATH,
DOWNLOADS);
matcher.addURI(AUTHORITY + "." + FILE_DOWNLOAD_PATH, FILE_DOWNLOAD_PATH + "/#",
DOWNLOAD_ID);
}


@Override
public boolean onCreate() {
helper = new SqliteHelper(getContext());
return true;
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
SQLiteDatabase db = helper.getReadableDatabase();
switch (matcher.match(uri)) {
case DOWNLOAD_ID:
long id = ContentUris.parseId(uri);
selection = selection == null ? "id = " + id : "id = " + id
+ " AND " + selection;
case DOWNLOADS:
Cursor c = db.query(FILE_DOWNLOAD_TABLE_NAME, projection, selection,
selectionArgs, null, null, sortOrder);
return c;


default:
throw new IllegalArgumentException("No Match Uri " + uri);
}
}


@Override
public String getType(Uri uri) {
switch (matcher.match(uri)) {
case DOWNLOAD_ID:
return "vnd.android.cursor.item/" + FILE_DOWNLOAD_PATH;
case DOWNLOADS:
return "vnd.android.cursor.dir/" + FILE_DOWNLOAD_PATH;
default:
throw new IllegalArgumentException("No Match Uri " + uri);
}
}


@Override
public Uri insert(Uri uri, ContentValues values) {
SQLiteDatabase db = helper.getWritableDatabase();
switch (matcher.match(uri)) {
case DOWNLOADS:
long id = db.insert(FILE_DOWNLOAD_TABLE_NAME, null, values);
return ContentUris.withAppendedId(uri, id);
default:
throw new IllegalArgumentException("No Match Uri " + uri);
}
}


@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
SQLiteDatabase db = helper.getWritableDatabase();
switch (matcher.match(uri)) {
case DOWNLOAD_ID:
long id = ContentUris.parseId(uri);
selection = selection == null ? "id = " + id : "id = " + id
+ " AND " + selection;
case DOWNLOADS:
return db.delete(FILE_DOWNLOAD_TABLE_NAME, selection, selectionArgs);


default:
throw new IllegalArgumentException("No Match Uri " + uri);
}
}


@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
SQLiteDatabase db = helper.getWritableDatabase();
switch (matcher.match(uri)) {
case DOWNLOAD_ID:
long id = ContentUris.parseId(uri);
selection = selection == null ? "id = " + id : "id = " + id
+ " AND " + selection;
case DOWNLOADS:
return db.update(FILE_DOWNLOAD_TABLE_NAME, values, selection,
selectionArgs);
default:
throw new IllegalArgumentException("No Match Uri " + uri);
}
}
}


千万不要忘记在配置中添加内容提供者

<!-- 文书下载内容提供者 -->
        <provider
            android:name="com.cattsoft.deliersystem.provider.DownloadFileProvider"
            android:authorities="com.cattsoft.provider.fileDownloadPath" >
        </provider>


package com.cattsoft.deliersystem.constants;


import android.net.Uri;


/**
 * 建立SQLite数据库和内容提供者用到的常量
 * 
 * @author 肖秋
 * 
 */
public interface SQLProviderConstants {
/** 内容提供者中用户信息的访问路径 */
public static final String AUTHORITY = "com.cattsoft.provider";


/** 内容提供者中访问文件下载地址所带的后缀 */
public static final String FILE_DOWNLOAD_PATH = "fileDownloadPath";


/** 通过内容提供者访问文书下载数据的URI */
public static final Uri FILE_DOWNLOAD_URI = Uri.parse("content://" + AUTHORITY
+ "." + FILE_DOWNLOAD_PATH + "/" + FILE_DOWNLOAD_PATH);


/** 数据名称 */
public static final String SQL_NAME = "DelierSystem.db";


/** 下载表的表名 */
public static final String FILE_DOWNLOAD_TABLE_NAME = "fileDownload";

/** 创建文书下载表的SQL语句 */
public final static String CREATE_DOWNLOAD_FILE_SQL = "CREATE TABLE IF NOT EXISTS "
+ FILE_DOWNLOAD_TABLE_NAME
+ " (id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "archiveId INTEGER CONSTRAINT archiveId_fk REFERENCES "
+ ARCHIVE_TABLE_NAME
+ "(archiveId), fileId INTEGER, downloadId INTEGER, isdownload BOOLEAN, fileName varchar(50), "
+ "savePath varchar(200), fileUrl varchar(200))";


/** 删除文书下载表的SQL语句 ,根据建立数据库的版本号不同,用户对数据的升级 */
public final static String DELETE_DOWNLOAD_FILE_TABLE = "DROP TABLE IF EXISTS "
+ FILE_DOWNLOAD_TABLE_NAME;


}

0 0
原创粉丝点击