如何从Android中另一个应用程序的内容提供商获取其他应用程序中的值?

时间:2016-10-03 05:23:23

标签: android

我有一个名为&#34的应用程序; AppOne"我已经制作了记录学生数据的内容提供者,为此我使用内容提供者来保存学生数据。我想在其他应用程序中检索这些数据。我怎么能这样做。

App One内容提供商: -

    static final String PROVIDER_NAME = "com.example.provider.College";
static final String URL = "content://" + PROVIDER_NAME + "/students";
static final Uri CONTENT_URI = Uri.parse(URL);

static final String _ID = "_id";
static final String NAME = "name";
static final String GRADE = "grade";

private static HashMap<String, String> STUDENTS_PROJECTION_MAP;

static final int STUDENTS = 1;
static final int STUDENT_ID = 2;

static final UriMatcher uriMatcher;
static{
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(PROVIDER_NAME, "students", STUDENTS);
    uriMatcher.addURI(PROVIDER_NAME, "students/#", STUDENT_ID);
}

/**
 * Database specific constant declarations
 */
private SQLiteDatabase db;
static final String DATABASE_NAME = "College";
static final String STUDENTS_TABLE_NAME = "students";
static final int DATABASE_VERSION = 1;
static final String CREATE_DB_TABLE =
        " CREATE TABLE " + STUDENTS_TABLE_NAME +
                " (_id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                " name TEXT NOT NULL, " +
                " grade TEXT NOT NULL);";

/**
 * Helper class that actually creates and manages
 * the provider's underlying data repository.
 */
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_DB_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " +  STUDENTS_TABLE_NAME);
        onCreate(db);
    }
}

@Override
public boolean onCreate() {
    Context context = getContext();
    DatabaseHelper dbHelper = new DatabaseHelper(context);

    /**
     * Create a write able database which will trigger its
     * creation if it doesn't already exist.
     */
    db = dbHelper.getWritableDatabase();
    return (db == null)? false:true;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    /**
     * Add a new student record
     */
    long rowID = db.insert( STUDENTS_TABLE_NAME, "", values);

    /**
     * If record is added successfully
     */

    if (rowID > 0)
    {
        Uri _uri = ContentUris.withAppendedId(CONTENT_URI, rowID);
        getContext().getContentResolver().notifyChange(_uri, null);
        return _uri;
    }
    throw new SQLException("Failed to add a record into " + uri);
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder) {
    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
    qb.setTables(STUDENTS_TABLE_NAME);

    switch (uriMatcher.match(uri)) {
        case STUDENTS:
            qb.setProjectionMap(STUDENTS_PROJECTION_MAP);
            break;

        case STUDENT_ID:
            qb.appendWhere( _ID + "=" + uri.getPathSegments().get(1));
            break;

        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
    }

    if (sortOrder == null || sortOrder == ""){
        /**
         * By default sort on student names
         */
        sortOrder = NAME;
    }
    Cursor c = qb.query(db, projection, selection, selectionArgs,null, null, sortOrder);

    /**
     * register to watch a content URI for changes
     */
    c.setNotificationUri(getContext().getContentResolver(), uri);
    return c;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    int count = 0;

    switch (uriMatcher.match(uri)){
        case STUDENTS:
            count = db.delete(STUDENTS_TABLE_NAME, selection, selectionArgs);
            break;

        case STUDENT_ID:
            String id = uri.getPathSegments().get(1);
            count = db.delete( STUDENTS_TABLE_NAME, _ID +  " = " + id +
                    (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""), selectionArgs);
            break;

        default:
            throw new IllegalArgumentException("Unknown URI " + uri);
    }

    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
    int count = 0;

    switch (uriMatcher.match(uri)){
        case STUDENTS:
            count = db.update(STUDENTS_TABLE_NAME, values, selection, selectionArgs);
            break;

        case STUDENT_ID:
            count = db.update(STUDENTS_TABLE_NAME, values, _ID + " = " + uri.getPathSegments().get(1) +
                    (!TextUtils.isEmpty(selection) ? " AND (" +selection + ')' : ""), selectionArgs);
            break;

        default:
            throw new IllegalArgumentException("Unknown URI " + uri );
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}

@Override
public String getType(Uri uri) {
    switch (uriMatcher.match(uri)){
        /**
         * Get all student records
         */
        case STUDENTS:
            return "vnd.android.cursor.dir/vnd.example.students";

        /**
         * Get a particular student
         */
        case STUDENT_ID:
            return "vnd.android.cursor.item/vnd.example.students";

        default:
            throw new IllegalArgumentException("Unsupported URI: " + uri);
    }
}

主要活动代码: -

    m_Mobile = (EditText) findViewById(R.id.input_mobile);
    m_Password = (EditText) findViewById(R.id.input_password);

    m_Submmit = (Button) findViewById(R.id.submit);
    m_Submmit.setOnClickListener(this);

    m_GetData = (Button) findViewById(R.id.get);
    m_GetData.setOnClickListener(this);
}

@Override
public void onClick(View view) {
    if (view==m_Submmit){
        s_szMobileNumer = m_Mobile.getText().toString().trim();
        s_szPassword = m_Password.getText().toString().trim();

        ContentValues values = new ContentValues();

        values.put(MyContentProvider.NAME,s_szMobileNumer);
        values.put(MyContentProvider.GRADE,s_szPassword);

        Uri uri = getContentResolver().insert(MyContentProvider.CONTENT_URI,values);

        Toast.makeText(getApplicationContext(),uri.toString(),Toast.LENGTH_LONG).show();
    }if (view == m_GetData){
        // Retrieve student records
        String URL = MyContentProvider.URL;

        Uri getdata = Uri.parse(URL);
        Cursor c = managedQuery(getdata, null, null, null, "name");
        if (c.moveToFirst()){
            do {
                Toast.makeText(this,
                        c.getString(c.getColumnIndex(MyContentProvider._ID)) +
                                ", " +  c.getString(c.getColumnIndex( MyContentProvider.NAME)) +
                                ", " + c.getString(c.getColumnIndex( MyContentProvider.GRADE)),
                        Toast.LENGTH_SHORT).show();

                Log.e(TAG, "Id:" + c.getString(c.getColumnIndex(MyContentProvider._ID)));
                Log.e(TAG, "User Name:" + c.getString(c.getColumnIndex(MyContentProvider.NAME)));
                Log.e(TAG, "Password::" + c.getString(c.getColumnIndex(MyContentProvider.GRADE)));
            }
            while (c.moveToNext());
        }
    }


}

在另一个应用程序中,我想检索所有学生记录和特定学生记录。

0 个答案:

没有答案