自定义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;
    }

}

 

posted @ 2015-10-29 22:07  aaddrrooiidd  阅读(135)  评论(0编辑  收藏  举报