content provider程序间数据共享

    xiaoxiao2025-12-05  1

    package testdemo.syh.com.db;

     

    public class DBProvider extends ContentProvider {

    private final static String authorities="a.b.c";

    private final static String CONTENT_URI="";

    public static final String AUTHORITY  = "a.b.c";

     

        // BaseColumn类中已经包含了 _id字段

       public static final class User implements BaseColumns {

            public static final Uri CONTENT_URI  = Uri.parse("content://"+AUTHORITY+ "/"+TABLE_NAME);

            // 表数据列

         public static final String  USER_NAME  = "name";

       //该ContentProvider所返回的数据类型的定义  

         public static final String CONTENT_TYPE = "a";//"vnd.android.cursor.dir/vnd.firstprovider.user";  

         public static final String CONTENT_TYPE_ITEM = "b";//"vnd.android.cursor.item/vnd.firstprovider.user"; 

        }

       

    private SQLiteDatabase     sqlDB;

        private DatabaseHelper    dbHelper;

        private static final String  DATABASE_NAME     = "Users.db";

        private static final int        DATABASE_VERSION         = 1;

        private static final String TABLE_NAME   = "User";

    //    private static final String TAG = "MyContentProvider";

     

        public static final UriMatcher uriMatcher;  

        public static final int INCOMING_USER_COLLECTION = 1;  

        public static final int INCOMING_USER_SINGLE = 2;  

        static {  

            uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);  

            uriMatcher.addURI(AUTHORITY, "/"+TABLE_NAME ,  

                    INCOMING_USER_COLLECTION);  

            //#代表id  

            uriMatcher.addURI(AUTHORITY, "/"+TABLE_NAME +"/#",  

                    INCOMING_USER_SINGLE);  

        } 

        

        private static class DatabaseHelper extends SQLiteOpenHelper {

            DatabaseHelper(Context context) {

                super(context, DATABASE_NAME, null, DATABASE_VERSION);

            }

     

            @Override

            public void onCreate(SQLiteDatabase db) {

                //创建用于存储数据的表

            db.execSQL("Create table " + TABLE_NAME + "( _id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT);");

            }

     

            @Override

            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

                db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

                onCreate(db);

            }

        }

     

        @Override

        public int delete(Uri uri, String s, String[] as) {

            return 0;

        }

     

        @Override

        public String getType(Uri uri) {

    //    switch(uriMatcher.match(uri)){  

    //        case INCOMING_USER_COLLECTION:  

    //            return User.CONTENT_TYPE;  

    //        case INCOMING_USER_SINGLE:  

    //            return User.CONTENT_TYPE_ITEM;  

    //        default:  

    //            throw new IllegalArgumentException("Unknown URI" + uri);  

    //    }

        return null;

        }

     

        @Override

        public Uri insert(Uri uri, ContentValues contentvalues) {

     

            sqlDB = dbHelper.getWritableDatabase();

            sqlDB.insert(TABLE_NAME, null, contentvalues);

            

            return null;

        }

     

        @Override

        public boolean onCreate() {

            dbHelper = new DatabaseHelper(getContext());

            return (dbHelper == null) ? false : true;

        }

     

        @Override

        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

        SQLiteDatabase db = dbHelper.getWritableDatabase();  

             Cursor c = db.query(TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);  

     

             return c; 

       

        }

     

        @Override

        public int update(Uri uri, ContentValues contentvalues, String s, String[] as) {

            return 0;

        }

     

    }

     

    mainifest.xml中设置

    <provider android:name="testdemo.syh.com.db.DBProvider"  

                      android:authorities="a.b.c"></provider>  

     

    另一程序中调用数据,既可插入数据也可查询:

    Uri uu= Uri.parse("content://"+"a.b.c"+ "/"+"User");

       

        ContentResolver cr=getApplicationContext().getContentResolver();

    ContentValues cv=new ContentValues();

    cv.put("_id", (int)(1000*Math.random()));

    cv.put("name", "game"+Math.random()*100);

    cr.insert(uu, cv);

       

     

        Cursor c=cr.query(uu, null, null, null, null);

    if(c!=null){

    Log.e("demo","Cursor counnt:"+c.getCount());

    }else{

    Log.e("demo","Cursor is null");

    }

    c.close();

    其他地方无需设置

    (2012-03-08 写于百度空间)

    转载请注明原文地址: https://ju.6miu.com/read-1304638.html
    最新回复(0)