ContentProvider的创建和ContentResolver的使用

1、创建contentProvider

 

定义(客户端调用时需知的内容)接口

package com.gogler.content;

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

public class Users {
	public static final String AUTHORITY = "com.gogler.content";
	public static final class User implements BaseColumns{
		public static final Uri CONTENT_URI  = Uri.parse("content://com.gogler.content");
 	      public static final String  USER_NAME  = "USER_NAME";
	 
	}
}

 

实现内容提供器

 

package com.gogler.content;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;

public class SumaryContentProvider extends ContentProvider {
	private SQLiteDatabase     sqlDB;
private DatabaseHelper    dbHelper;
private static final String  DATABASE_NAME     = "Users.db";
private static final int        DATABASE_VERSION         = 1;
private static final String TABLE_NAME   = "User";
private static final String TAG = "SumaryContentProvider";

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

   @Override
    public void onCreate(SQLiteDatabase db) {
        //创建用于存储数据的表
    db.execSQL("Create table " + TABLE_NAME + "( _id INTEGER PRIMARY KEY AUTOINCREMENT, " +
    		"USER_NAME TEXT);");
    }

   @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(db);
    }
}

@Override
public int delete(Uri uri, String s, String[] as) {
    return 0;
}

@Override
public String getType(Uri uri) {
    return null;
}

@Override
public Uri insert(Uri uri, ContentValues contentvalues) {
    sqlDB = dbHelper.getWritableDatabase();
    long rowId = sqlDB.insert(TABLE_NAME, "", contentvalues);
    if (rowId > 0) {
        Uri rowUri = ContentUris.appendId(Users.User.CONTENT_URI.buildUpon(), rowId).build();
        getContext().getContentResolver().notifyChange(rowUri, null);
        return rowUri;
    }
    throw new SQLException("Failed to insert row into " + uri);
}

@Override
public boolean onCreate() {
    dbHelper = new DatabaseHelper(getContext());
    return (dbHelper == null) ? false : true;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    SQLiteDatabase db = dbHelper.getReadableDatabase();
    qb.setTables(TABLE_NAME);
    Cursor c = qb.query(db, projection, selection, null, null, null, sortOrder);
    c.setNotificationUri(getContext().getContentResolver(), uri);
    return c;
}

@Override
public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {
    return 0;
}


}


 

2、使用内容提供器ContentResolver(客户端)

 

package com.gogler.content;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Toast;

public class ContentSumaryActivity extends Activity {
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        for(int i =1; i<=10; i++){
        insertRecord("User"+i);
        }
        displayRecords();
    }
   
    private void insertRecord(String userName) {
        ContentValues values = new ContentValues();
        values.put(Users.User.USER_NAME, userName);
        getContentResolver().insert(Users.User.CONTENT_URI, values);
    }

   private void displayRecords() {
        String columns[] = new String[] { Users.User._ID, Users.User.USER_NAME };
        Uri myUri = Users.User.CONTENT_URI;
        Cursor cur = managedQuery(myUri, columns,null, null, null );
        if (cur.moveToFirst()) {
            String id = null;
            String userName = null;
            do {
                id = cur.getString(cur.getColumnIndex(Users.User._ID));
                userName = cur.getString(cur.getColumnIndex(Users.User.USER_NAME));
                Toast.makeText(this, id + " " + userName, Toast.LENGTH_LONG).show();
           } while (cur.moveToNext());
       }
    }


}


 

3、参考

《Android基础 :  Android Content Provider》

上一篇:纯客户端JAVASCRIPT实现的AES算法加密/解密面板(在线keepass?)


下一篇:如何逐步去构建一个大型网站系统