编写最简单的Content Provider
来源:互联网 发布:淘宝静物拍摄价格 编辑:程序博客网 时间:2024/05/17 03:02
http://www.apkbus.com/android-16352-1-1.html
在自己的android应用中存储数据,可以用SQLite数据库。不过,如果需要在多个应用中共享数据,在Android中,只有通过Content provider机制。
下面用一个最简单(不完整)的示例来说明Content Provider的创建。在界面中使用这个示例显示的效果:
显示帝王姓名、登基年份和朝代。
在这个简单示例中,包括两部分:
- 创建一个Content Provider;
- 使用这个Content Provider(目前是在同一个应用中,可以在其他应用中以相同方式调用)。
content provider通过抽象一致的接口,供其他开发者使用Content provider,而实现Content provider,既可以用sqlite3这样的android内置数据库,也可以使用文件系统,甚至可以自己写其他的实现,只要实现规定的接口即可。
实现一个Content provider,需要做:
- 继承ContentProvider,实现该类的几个抽象方法;
- 在manifest文件中声明这个Content provider。
实现的Content provider代码:
- package com.easymorse.cp;
- import android.content.ContentProvider;
- import android.content.ContentValues;
- import android.content.Context;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteDatabase;
- import android.database.sqlite.SQLiteStatement;
- import android.net.Uri;
- public classMyContentProvider extends ContentProvider {
- public static final Uri CONTENT_URI = Uri.parse("content://com.easymorse.cp.mycp");
- public static final String _ID = "id";
- public static final String NAME = "name";
- public static final String DYNASTY = "dynasty";
- public static final String START_YEAR = "start_year";
- private static SQLiteDatabase database;
- private static voidcreateTablesIfNotExists() {
- database.execSQL("create table if not exists emperors("
- + " id integer primary key autoincrement," + " name text,"
- + "dynasty text," + "start_year text" + ");");
- SQLiteStatement statement = database
- .compileStatement("insert into emperors(name,dynasty,start_year) values(?,?,?)");
- int index = 1;
- statement.bindString(index++, "朱元璋");
- statement.bindString(index++, "明");
- statement.bindString(index++, "1398");
- statement.execute();
- index = 1;
- statement.bindString(index++, "玄烨");
- statement.bindString(index++, "清");
- statement.bindString(index++, "1722");
- statement.execute();
- statement.close();
- }
- @Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
- return 0;
- }
- @Override
- public String getType(Uri uri) {
- return null;
- }
- @Override
- public Uri insert(Uri uri, ContentValues contentValues) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public boolean onCreate() {
- if (database == null) {
- database = this.getContext().openOrCreateDatabase("emperors",
- Context.MODE_PRIVATE, null);
- createTablesIfNotExists();
- }
- return database != null;
- }
- @Override
- public Cursor query(Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- Cursor cursor = database.rawQuery("select * from emperors", null);
- return cursor;
- }
- @Override
- public int update(Uri uri, ContentValues contentValues, String selection,
- String[] selectionArgs) {
- // TODO Auto-generated method stub
- return 0;
- }
- }
- query() <<
- insert()
- update()
- delete()
- getType()
- onCreate()<<
- public static final Uri CONTENT_URI = Uri.parse("content://com.easymorse.cp.mycp");
- public static final String _ID = "id";
- public static final String NAME = "name";
- public static final String DYNASTY = "dynasty";
- public static final String START_YEAR = "start_year";
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".UseContactActivity" android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <provider android:name="com.easymorse.cp.MyContentProvider"
- android:authorities="com.easymorse.cp.mycp"></provider>
- </application>
- package com.easymorse.cp;
- import android.app.Activity;
- import android.database.Cursor;
- import android.os.Bundle;
- import android.widget.TextView;
- public class UseContactActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- TextView textView = new TextView(this);
- textView.setText(getContentProviderValues());
- this.setContentView(textView);
- }
- private String getContentProviderValues() {
- StringBuilder builder = new StringBuilder();
- Cursor cursor = managedQuery(MyContentProvider.CONTENT_URI, null, null,
- null, null);
- while (cursor.moveToNext()) {
- builder
- .append(
- cursor.getString(cursor
- .getColumnIndex(MyContentProvider.NAME)))
- .append(" | ")
- .append(
- cursor
- .getString(cursor
- .getColumnIndex(MyContentProvider.START_YEAR)))
- .append(" | ")
- .append(
- cursor.getString(cursor
- .getColumnIndex(MyContentProvider.DYNASTY)))
- .append("\n");
- }
- return builder.toString();
- }
- }
0 0
- 编写最简单的Content Provider
- Android-编写简单的Content Provider
- 简单的content provider
- 编写完整的Content provider示例
- 编写完整的Content provider示例
- [android开发实例] sqlite+content provider+cursor adapter的最简单实现示例
- 【Android学习系列】编写完整的Content provider示例
- content provider 的使用
- Android的Content Provider
- Content Provider的加载
- Content Provider的权限
- content provider的使用!
- Content Provider的加载
- android里的service和content provider简单介绍
- 总结Content Provider的使用
- Android本地的Content Provider
- Android本地的Content Provider
- 总结Content Provider的使用
- ioctlsocket函数说明
- HDU 1372 Knight Moves【BFS】
- 安装R语言在Linux环境
- Shadow of the Eternals' crowdfunding Buy ESO Gold
- cocos2dx 3.2 学习篇之五(简单理解内存管理)
- 编写最简单的Content Provider
- DBGrid支持鼠标滚轮滚动的解决办法
- SAS ERROR: More positional parameters found than defined.
- 退出多个Activity
- Fact dimension and degenerate dimension
- SD荆州市附件中代付款将自动控制顾客
- 最详细eclipse汉化插件安装教程
- 驴子圈资讯:同程发力无线业务布局休闲旅游O2O
- Socket 阻塞与非阻塞模式