Android第十六天自定义ContentProvider

来源:互联网 发布:python \ 编辑:程序博客网 时间:2024/05/23 13:27
package com.jason.myprovider;


import com.jason.constant.Constant;
import com.jason.databasehelper.DataBaseHelper;


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 android.util.Log;


public class StudentProvider extends ContentProvider {
private final static String TAG = "StudentProvider";
private DataBaseHelper helper;
private SQLiteDatabase database;
private static UriMatcher matcher; // 一个工具类,用来帮我们创建ContenUri的


private final static String authority = "com.jason.myprovider.StudentProvider";


public StudentProvider() {
// TODO Auto-generated constructor stub
}


// content://com.jason.myprovider.StudentProvider/path/xxx
static {
matcher = new UriMatcher(UriMatcher.NO_MATCH);
// 通过UriMatcher,在authority中添加一个path,形成一个新的Uri
matcher.addURI(authority, "student", 1); // com.jason.myprovider.StudentProvider/student
matcher.addURI(authority, "newstudent", 2); // com.jason.myprovider.StudentProvider/newstudent
// *匹配的是字符
matcher.addURI(authority, "student/*", 3); // com.jason.myprovider.StudentProvider/student/name
// #匹配的是数字
matcher.addURI(authority, "student/#", 4);
}


@Override
/**
*ContentProvider是一个单列模式, 只会被创建一次
*在安装应用程序的时候,会调用这个方法
*一般是创建数据库的操作
*/
public boolean onCreate() {
Log.i(TAG, "-------onCreate-------->>");
// 创建数据库
helper = new DataBaseHelper(getContext(), "student_info.db", 1);
database = helper.getReadableDatabase();
return true;
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Log.i(TAG, "-------query-------->>");
// 从uri中取出code
int code = matcher.match(uri);


Cursor cursor = null;
Log.i(TAG, "-------code-------->>" + code);


switch (code) {
case 1:
cursor = database.query(Constant.TABLE_NAME, projection, selection,
selectionArgs, null, null, sortOrder);
break;
case 2:
cursor = database.query(Constant.TABLE_NEW_NAME, projection,
selection, selectionArgs, null, null, sortOrder);
break;
case 3: // content://com.jason.myprovider.StudentProvider/student/jack
// Uri.withappendedPathSegment
String name = uri.getLastPathSegment();
cursor = database.query(Constant.TABLE_NEW_NAME, projection,
"name =?", new String[] { name }, null, null, sortOrder);
break;
case 4: // content://com.jason.myprovider.StudentProvider/student/1
// 获取id
Long id = ContentUris.parseId(uri);
database.query(Constant.TABLE_NEW_NAME, projection, "_id=?",
new String[] { id + "" }, null, null, sortOrder);
break;
default:
break;
}
return cursor;
}


@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}


@Override
public Uri insert(Uri uri, ContentValues values) {
Log.i(TAG, "-------query-------->>");
// 从uri中取出code
int code = matcher.match(uri);


Log.i(TAG, "-------code-------->>" + code);
long id = 0;
switch (code) {
case 1:
id = database.insert(Constant.TABLE_NAME, null, values);
break;
case 2:
id = database.insert(Constant.TABLE_NEW_NAME, null, values);
break;
default:
break;
}


// 将id转换为Uri
// com.jason.myprovider.StudentProvider/student/id
Uri rawUri = ContentUris.withAppendedId(uri, id);
return rawUri;
}


@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
Log.i(TAG, "-------query-------->>");
// 从uri中取出code
int code = matcher.match(uri);


Log.i(TAG, "-------code-------->>" + code);
int lines = 0;
switch (code) {
case 1:
lines = database.delete(Constant.TABLE_NAME, selection,
selectionArgs);
break;
case 2:
lines = database.delete(Constant.TABLE_NEW_NAME, selection,
selectionArgs);
break;
default:
break;
}
return lines;
}


@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
Log.i(TAG, "-------update-------->>");
int code = matcher.match(uri);
int lines = 0;


switch (code) {
case 1:
lines = database.update(Constant.TABLE_NAME, values, selection,
selectionArgs);
break;
case 2:
lines = database.update(Constant.TABLE_NEW_NAME, values, selection,
selectionArgs);
break;
case 3:
String name = uri.getLastPathSegment();
lines = database.update(Constant.TABLE_NAME, values, "name=?",
new String[] { name });
break;
case 4:
Long id = ContentUris.parseId(uri);
lines = database.update(Constant.TABLE_NAME, values, "_id=?",
new String[] { id + "" });
break;
default:
break;
}
return lines;
}

}



===============================================================

package com.jason.android18_mycontentresolver;


import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;


public class MainActivity extends Activity {
private ListView listView_main_info;
private ContentResolver resolver;
private final static String student_Uri = "content://com.jason.myprovider.StudentProvider/student";
private final static String newstudent_Uri = "content://com.jason.myprovider.StudentProvider/newstudent";
private SimpleCursorAdapter adapter;
// private SimpleAdapter adapter;


private EditText editText_name;
private EditText editText_score;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


listView_main_info = (ListView) findViewById(R.id.listView1);
editText_name = (EditText) findViewById(R.id.editText1);
editText_score = (EditText) findViewById(R.id.editText2);


resolver = getContentResolver();
}


public void clickButton(View view) {


String id = editText_score.getText().toString();
String name = editText_name.getText().toString();


switch (view.getId()) {
case R.id.button_query:
Cursor cursor = null;
if (!id.equals("") && name.equals("")) { // 通过id来查询某行,这个时候你可以选择用某行的uri来执行
// 获取行的uri
Uri newUri = ContentUris.withAppendedId(Uri.parse(student_Uri),
Long.parseLong(id));


cursor = resolver.query(newUri, null, null, null, null);
} else if (id.equals("") && !name.equals("")) { // 通过id来查询某行,这个时候你可以选择用某行的uri来执行
// 获取行的Uri
Uri newUri = Uri.withAppendedPath(Uri.parse(student_Uri), name);
cursor = resolver.query(newUri, null, null, null, null);
} else { // 全查
cursor = resolver.query(Uri.parse(student_Uri), null, null,
null, null);
}


adapter = new SimpleCursorAdapter(MainActivity.this,
R.layout.listview_item, cursor, new String[] { "name",
"score" }, new int[] { R.id.textView_name,
R.id.textView_score }, 1);


listView_main_info.setAdapter(adapter);


break;


case R.id.button_insert:
ContentValues values = new ContentValues();
values.put("name", editText_name.getText().toString());
values.put("score", editText_score.getText().toString());
Uri rawUri = resolver.insert(Uri.parse(student_Uri), values);
Toast.makeText(MainActivity.this,
"插入的新的行的uri:" + rawUri.toString(), 0).show();


break;


case R.id.button_delete:
int nums = resolver.delete(Uri.parse(student_Uri), "_id=?",
new String[] { "1" });
Toast.makeText(MainActivity.this, "删除的行的数量:" + nums,
Toast.LENGTH_SHORT).show();
break;

case R.id.button_update:


ContentValues values2 = new ContentValues();
values2.put("name", editText_name.getText().toString());
values2.put("score", editText_score.getText().toString());
int lines = resolver.update(Uri.parse(student_Uri), values2,
"_id=?", new String[] { "2" });
Toast.makeText(MainActivity.this, "更新的行数:" + lines, 0).show();
break;
default:
break;
}
}
}

0 0
原创粉丝点击