ContentProvider的用法与理解
来源:互联网 发布:tp3.2数据库配置 编辑:程序博客网 时间:2024/04/28 08:47
ContentProvider是用来分享数据的一个标准接口,所以在使用上它分为3部分
中间部分就是一个注册,在manifest中加provider,由主机名和路径组陈,表示全球唯一的一个继承了ContentProvider并实现了抽象方法的类
ContentProvider部分就是向外部提供数据的部分,它提供了一些标准的方法让外部操作应用程序的数据
需要使用别的应用程序的使用者,getContentResolver().query(Uri.parse("content://com.example.huanghanqing.testsqlit.usercp")),通过后面的那个参数可以拿到ContentProvider
package com.example.huanghanqing.testsqlite;import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.net.Uri;import android.support.annotation.Nullable;/** * Created by huanghanqing on 2016/2/17. * 该类的作用为提供统一的接口,为外部访问该应用的数据提供接口 */public class UsersCP extends ContentProvider { private UsersDb db; private SQLiteDatabase dbReader,dbWriter; public static final String TABLE_NAME = "user"; //参数String类型必须与manifest中的<provider>中的authorities相同,用于对外提供公开该ContentProvider的唯一标识符 public static final Uri URI = Uri.parse("content://com.example.huanghanqing.testsqlit.usercp"); @Override public boolean onCreate() { db = new UsersDb(getContext()); dbReader = db.getReadableDatabase(); dbWriter = db.getWritableDatabase(); return true; } @Nullable @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return dbReader.query(TABLE_NAME,projection,selection,selectionArgs,null,null,sortOrder); } @Nullable @Override public String getType(Uri uri) { return null; } @Nullable @Override public Uri insert(Uri uri, ContentValues values) { dbWriter.insert(TABLE_NAME,null,values); return uri; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return dbWriter.delete(TABLE_NAME,selection,selectionArgs); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return dbWriter.update(TABLE_NAME,values,selection,selectionArgs); }}
android:authorities="com.example.huanghanqing.testsqlite..usercp"android:name="UsersCP"/>
package com.example.huanghanqing.testsqlite;import android.support.v4.widget.SimpleCursorAdapter;import android.app.ListActivity;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;public class MainActivity extends ListActivity { private UsersDb db; EditText nameEditText; EditText sexEditText; Button add; SQLiteDatabase dbWriter; SQLiteDatabase dbReader; SimpleCursorAdapter adapter; Cursor c; ListView listView; @SuppressWarnings("deprecation") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = new UsersDb(this); dbReader = db.getReadableDatabase(); dbWriter = db.getWritableDatabase(); nameEditText = (EditText) findViewById(R.id.editTextName); sexEditText = (EditText) findViewById(R.id.editTextSex); add = (Button) findViewById(R.id.add); //listView = (ListView)findViewById(R.id.listView1); c = dbReader.query("user", null, null, null, null, null, null); //c = getContentResolver().query(UsersCP.URI,) adapter = new SimpleCursorAdapter(this, R.layout.test_sqlite_item, c, new String[]{"name", "sex"}, new int[]{R.id.name, R.id.sex}); setListAdapter(adapter); add.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub ContentValues cv = new ContentValues(); cv.put("name", nameEditText.getText().toString()); cv.put("sex", sexEditText.getText().toString()); //dbWriter.insert("user", null, cv); getContentResolver().insert(UsersCP.URI,cv);//拿到该uri就代表获得了该应用的ContentProvider refresh(); } }); getListView().setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub return false; } }); } public void refresh() {// c = dbReader.query("user", null, null, null, null, null, null);// adapter.changeCursor(c); adapter.changeCursor(getContentResolver().query(UsersCP.URI,null,null,null,null)); }}
0 0
- ContentProvider的用法与理解
- ContentProvider的理解与使用
- ContentProvider的理解与使用
- 关于ContentProvider的理解与简单应用
- contentResolver与ContentProvider理解
- 对ContentProvider的理解
- ContentProvider 组件的理解
- ContentProvider的用法
- 说说ContentProvider的用法
- 说说ContentProvider的用法
- ContentProvider的用法
- ContentProvider的用法浅析
- ContentProvider的用法
- ContentProvider的详细用法
- Contentprovider的基本用法
- Android ContentProvider理解与实践
- ContentProvider的理解和使用
- Android中ContentProvider的用法
- linux 终端快捷键
- Redis教程(九):主从复制配置实例
- 【002】Mac使用命令行启动app
- svn错误问题处理could not connect to server
- Kafka Producer 工作流程
- ContentProvider的用法与理解
- iOS 数据持久化 NSUserDefault 的使用 NSUserDefaults读取和写入自定义对象
- 数据表写操作卡住,导致所有的注册失败
- kvm虚拟化学习(更新中...)
- unable to load native-hadoop library for your platform using builtin-java classes
- 安卓解决adb被占用的问题
- 二叉树的深度&判断一棵二叉树是否是平衡二叉树&110. Balanced Binary Tree
- LeetCode_1_TwoSum(Java Code)
- 用EL表达式取List<Map<String, Object>>map的值(查阅了很久,总结一下)