ContentProvider使用

来源:互联网 发布:淘宝综合排名规则 编辑:程序博客网 时间:2024/06/05 12:07

ContentProvider很少用到、用于暴漏数据给外部程序访问。

首先还是DBHelper,因为ContentProvider最终还是调用的DBHelper

public class DBHelper extends SQLiteOpenHelper {
       private static final String DB_NAME = "database.db";
       private static final int DB_VERSION = 1;
       private SQLiteDatabase db ;
      
       public DBHelper(Context context) {
             super(context, DB_NAME, null, DB_VERSION);
             db = getWritableDatabase();
      }

       @Override
       public void onCreate(SQLiteDatabase db) {
            StringBuffer sql = new StringBuffer();
            sql.append( "CREATE TABLE table_like (       " );     
            sql.append( "       _id INTEGER PRIMARY KEY, " );     
            sql.append( "       brand_name TEXT,         " );     
            sql.append( "       short_title TEXT         " );     
            sql.append( ")                               " );
            db.execSQL(sql.toString());
      }

       @Override
       public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
             if (oldVersion < newVersion) {
                  onCreate(db);
            }
      }
      
       public void excuteSQL(String sql, Object... bindArgs) {
             db.execSQL(sql, bindArgs);
      }
      
       public Cursor query(String sql, String... selectionArgs) {
             return db .rawQuery(sql, selectionArgs);
      }
      
       public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String orderBy) {
             return db .query(table, columns, selection, selectionArgs, null, null , orderBy);
      }
      
       public long insert(String table, ContentValues values) {
             return db .insert(table, null, values);
      }
      
       public int update(String table, ContentValues values, String whereClause, String[] whereArgs) {
             return db .update(table, values, whereClause, whereArgs);
      }
      
       public int delete(String table, String whereClause, String[] whereArgs) {
             return db .delete(table, whereClause, whereArgs);
      }

}

//第二部、自定义contentProvider继承系统的ContentProvider(将DBhelper对象的方法进行封装)

public class MyContentProvider extends ContentProvider {
       public static final UriMatcher URI_MATCHER= new UriMatcher(UriMatcher.NO_MATCH );
       public static final int TUAN=1;
       public static final String TUAN_NAME= "Tuan";
       public static final  String AUTHORITY="com.lb.contentprovider" ;//这个和注册的路径一致
      
       private DBHelper db ;

       static{
             //向外暴漏的接口 uri,TUAN参数是用来判断根据TUAN来判断操作哪个表
             URI_MATCHER.addURI(AUTHORITY, "tuan", TUAN);
      }
      
       @Override
       public boolean onCreate() {
             //实例化DB
             db= new DBHelper(getContext());
             return true ;
      }

      
      
       @Override
       public int delete(Uri uri, String selection, String[] selectionArgs) {
             int code = URI_MATCHER.match(uri); //得到这个uri的code码、进行判断
             int row =0;
             switch (code) {
             case TUAN :
                  row= db.delete( TUAN_NAME, selection, selectionArgs);
                   break;

             default:
                   break;
            }
             return row;
      }

       @Override
       public String getType(Uri uri) {
             return null ;
      }

       @Override
       public Uri insert(Uri uri, ContentValues values) {
             int code =URI_MATCHER.match(uri);
             switch (code) {
             case TUAN :
                   db.insert( TUAN_NAME, values);
                   break;

             default:
                   break;
            }
             return null ;
      }

       @Override
       public Cursor query(Uri uri, String[] projection, String selection,
                  String[] selectionArgs, String sortOrder) {
            Cursor c = null;
             int code=URI_MATCHER .match(uri);
             switch (code) {
             case TUAN :
                  c= db.query( TUAN_NAME, projection, selection, selectionArgs, sortOrder);
                   break;
             default:
                   break;
            }
             return c;
      }

       @Override
       public int update(Uri uri, ContentValues values, String selection,
                  String[] selectionArgs) {
             int i =0;
             int code =URI_MATCHER.match(uri);
             switch (code) {
             case TUAN :
                  i= db.update( TUAN_NAME, values, selection, selectionArgs);
                   break;

             default:
                   break;
            }
             return i;
      }

}

    //第三部、在配置文件注册!!!
        <provider
            android:name="com.lb.contentprovider.MyContentProvider"
            android:authorities="com.lb.contentprovider"
            android:exported="true" //为true外部程序才能访问
            tools:ignore="ExportedContentProvider" />


接着是另外一个apk程序来访问

     插入
ContentResolver resolver = getContentResolver();
            ContentValues values = new ContentValues();
            values.put( "brand_name", text1 .getText().toString());
            values.put( "short_title", text2 .getText().toString());
            resolver.insert(Uri. parse(Constants.URI), values);

Constants. URI="content://com.lb.contentprovider/tuan" ;





0 0