权限异常。你把android:exported="true" 这个去掉试试。

解决方案 »

  1.   


    contentProvider代码package com.xuyu.db.contentProvider;import com.xuyu.database.MyDbOpenHelper;import android.content.ContentProvider;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.UriMatcher;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.net.Uri;
    public class contentProvider extends ContentProvider {

    private static final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); 
    private static final int INSERT = 0; 
    private static final int DELETE = 1;
    private static final int UPDATE = 2;
    private static final int QUERY = 3;

    static
    {
     matcher.addURI("com.xuyu.database","insert",INSERT);
     matcher.addURI("com.xuyu.database","delete",DELETE);
     matcher.addURI("com.xuyu.database","update",UPDATE);
     matcher.addURI("com.xuyu.database","query",QUERY);
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
    int result = matcher.match(uri);

    switch(result)
    {
    case DELETE:
    System.out.println("现在正在执行delete方法");
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getWritableDatabase();
    return db.delete("person", selection, selectionArgs);
    default:
    System.out.println("方法执行产生异常");
    return 0;
    }
    } @Override
    public String getType(Uri arg0) {
    return null;
    } @Override
    public Uri insert(Uri uri, ContentValues values) {
    int result = matcher.match(uri);

    switch(result)
    {
    case INSERT:
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getReadableDatabase();
    db.insert("person", "id", values);
    return uri;
    default:
    return null;
    }
    } @Override
    public boolean onCreate() {
    return false;
    } @Override
    public Cursor query(Uri uri, String[] projection,
                String selection, String[] selectionArgs, String sortOrder) {

    int result = matcher.match(uri);

    switch(result)
    {
    case QUERY:
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getWritableDatabase();
    return db.query("person", null, selection, selectionArgs, null, null, null);
    default:
    return null;
    }
    } @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    int result = matcher.match(uri);

    switch(result)
    {
    case UPDATE:
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getWritableDatabase();
    return db.update("person", values, selection, selectionArgs);
    default:
    return 0;
    }
    }}MainActivity.java代码如下
    [code=java]
    package com.xuyu.application2;import android.support.v7.app.ActionBarActivity;
    import android.content.ContentResolver;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;public class MainActivity extends ActionBarActivity { @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ContentResolver resolver = getContentResolver();
    Uri uri = Uri.parse("content://com.xuyu.database/delete");
    resolver.delete(uri, "name=?", new String[]{"allen"});
    } @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;
    } @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
    return true;
    }
    return super.onOptionsItemSelected(item);
    }
    }
      

  2.   


    contentProvider代码package com.xuyu.db.contentProvider;import com.xuyu.database.MyDbOpenHelper;import android.content.ContentProvider;
    import android.content.ContentUris;
    import android.content.ContentValues;
    import android.content.UriMatcher;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.net.Uri;
    public class contentProvider extends ContentProvider {

    private static final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); 
    private static final int INSERT = 0; 
    private static final int DELETE = 1;
    private static final int UPDATE = 2;
    private static final int QUERY = 3;

    static
    {
     matcher.addURI("com.xuyu.database","insert",INSERT);
     matcher.addURI("com.xuyu.database","delete",DELETE);
     matcher.addURI("com.xuyu.database","update",UPDATE);
     matcher.addURI("com.xuyu.database","query",QUERY);
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
    int result = matcher.match(uri);

    switch(result)
    {
    case DELETE:
    System.out.println("现在正在执行delete方法");
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getWritableDatabase();
    return db.delete("person", selection, selectionArgs);
    default:
    System.out.println("方法执行产生异常");
    return 0;
    }
    } @Override
    public String getType(Uri arg0) {
    return null;
    } @Override
    public Uri insert(Uri uri, ContentValues values) {
    int result = matcher.match(uri);

    switch(result)
    {
    case INSERT:
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getReadableDatabase();
    db.insert("person", "id", values);
    return uri;
    default:
    return null;
    }
    } @Override
    public boolean onCreate() {
    return false;
    } @Override
    public Cursor query(Uri uri, String[] projection,
                String selection, String[] selectionArgs, String sortOrder) {

    int result = matcher.match(uri);

    switch(result)
    {
    case QUERY:
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getWritableDatabase();
    return db.query("person", null, selection, selectionArgs, null, null, null);
    default:
    return null;
    }
    } @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    int result = matcher.match(uri);

    switch(result)
    {
    case UPDATE:
    MyDbOpenHelper openHelper = new MyDbOpenHelper(getContext());
    SQLiteDatabase db = openHelper.getWritableDatabase();
    return db.update("person", values, selection, selectionArgs);
    default:
    return 0;
    }
    }}MainActivity.java代码如下
    [code=java]
    package com.xuyu.application2;import android.support.v7.app.ActionBarActivity;
    import android.content.ContentResolver;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;public class MainActivity extends ActionBarActivity { @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ContentResolver resolver = getContentResolver();
    Uri uri = Uri.parse("content://com.xuyu.database/delete");
    resolver.delete(uri, "name=?", new String[]{"allen"});
    } @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;
    } @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
    return true;
    }
    return super.onOptionsItemSelected(item);
    }
    }
    这是一个ContentPrivider源码再加上一个是另外一个项目的MainActivity代码