自定义ContentProvider
首先我们要明白内容提供者为什么提供内容的,android中需要把内容共享出来,但是数据库又不可以对外公开,这时候我们就需要内容提供者出面了,他的作用就是把封闭的数据库通过他可以访问到里面的数据,从而让外界访问。在android系统里有很多很多的内容提供者。我们怎么能找到他呢?通过主机名就可以了,这就好像一个班里有很多学生,你知道你要找的这个人的名字就能找到他了。
怎么来自定义内容提供者呢?其实说白了他就是一个java类,然后继承了ContentProvider,这样系统就承认他是一个内容提供者了。
还要在配置文件里进行内容提供者的配置
<provider
android:name="com.neusoft.demo.MyContentProvider"
android:authorities="com.hello.demo" 这个就是主机名称
android:exported="true" > 必须加的
</provider>
这是内容提供者里插入的方法,我们就当他当例子来说明。
这个方法注意了,不是应用程序本身访问的,而是让外界来访问的。
外界传进来数据,然后在传递uri就能找到这个方法了,然后对他进行操作
@Override
public Uri insert(Uri uri, ContentValues values) {
db.insert("people", null, values);
return uri;
}
这时候再其他的应用程序里通过内容解析器就可以进行访问了
findViewById(R.id.insert_btn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ContentResolver cr = getContentResolver();//解析器
ContentValues values = new ContentValues();//要传入的参数
values.put("name","急急急");
values.put("sex", "男");
cr.insert(Uri.parse("content://com.hello.demo"), values);
}
});
package com.neusoft.demo; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; public class MyContentProvider extends ContentProvider { SQLiteOpenHelper oh; SQLiteDatabase db; @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return db.delete("people", selection, selectionArgs); } @Override public String getType(Uri uri) { // TODO: Implement this to handle requests for the MIME type of the data // at the given URI. throw new UnsupportedOperationException("Not yet implemented"); } @Override public Uri insert(Uri uri, ContentValues values) { db.insert("people", null, values); return uri; } @Override public boolean onCreate() { oh = new MyOpenHelp(getContext()); db = oh.getWritableDatabase(); return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // TODO: Implement this to handle query requests from clients. throw new UnsupportedOperationException("Not yet implemented"); } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { // TODO: Implement this to handle requests to update one or more rows. throw new UnsupportedOperationException("Not yet implemented"); } }
package com.neusoft.demo; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class MyOpenHelp extends SQLiteOpenHelper { public MyOpenHelp(Context context) { super(context, "people.db", null, 1); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { String sql = "create table people(_id integer primary key,name varchar(20),sex varchar(10) )"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub } }
调用的activity
package com.example.contentprovider2; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.insert_btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { ContentResolver cr = getContentResolver(); ContentValues values = new ContentValues(); values.put("name", "急急急"); values.put("sex", "男"); cr.insert(Uri.parse("content://com.hello.demo"), values); } }); findViewById(R.id.delete_btn).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { ContentResolver cr = getContentResolver(); cr.delete(Uri.parse("content://com.hello.demo"), "_id=?", new String[] { String.valueOf(1) }); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }