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
原创粉丝点击