无法访问其他应用程序的内容提供程序(android)

时间:2010-07-04 18:05:53

标签: android provider

我在应用程序A中创建了一个自定义内容提供程序,并让另一个应用程序B在A中访问此内容提供程序。以下是我的代码段:

在应用程序A中的内容提供者中:

public Cursor query(Uri uri, String[] projection, String selection,
                    String[] selectionArgs, String sortOrder) {
    int table = um.match(uri);
    SQLiteQueryBuilder sqlBuilder = new SQLiteQueryBuilder();;

    // configure where to query from
    if (table == MYKEYS || table == MYKEY_ID) {
        sqlBuilder.setTables(DATABASE_TABLE_MY);
        if (table == MYKEY_ID)
            sqlBuilder.appendWhere(
            _ID + " = " + uri.getPathSegments().get(1)); 
    }

    else if (table == FDKEYS || table == FDKEY_ID) {
        sqlBuilder.setTables(DATABASE_TABLE_FD);
        if (table == FDKEY_ID)
            sqlBuilder.appendWhere(
            _ID + " = " + uri.getPathSegments().get(1));
    }

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

    if (sortOrder==null || sortOrder=="")
        sortOrder = DEFAULT_SORT_ORDER;

    // query
    SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    Cursor c = sqlBuilder.query(
               db, 
               projection, 
               selection, 
               selectionArgs, 
               null, 
               null, 
               sortOrder);

    //register to watch a content URI for changes
    c.setNotificationUri(getContext().getContentResolv er(), uri);

    return c;
}

这是我在应用程序A清单文件中声明我的内容提供程序的方式:

<provider android:name=".KeysProvider"
android:authorities="com.android.keychain.keysprovider"/>

这是我在应用程序B中进行查询的方式:

String[] whereArgs = new String[]{"Private Key"};
Cursor c = managedQuery(MYTABLE_URI, null, "name", whereArgs, null); 

当我运行应用程序B的代码时,我有以下错误:

07-02 12:53:58.153:ERROR / DatabaseUtils(9195):android.database.sqlite.SQLiteException:绑定或列索引超出范围:handle 0x126558

我真的不知道这里有什么问题。当我尝试从应用程序A中访问同一内容提供程序时,它工作正常。此外,从日志中看,似乎从应用程序B(在managedQuery行),它可以转到应用程序A中的此内容提供程序(KeysProvider) )但在尝试进行查询时死亡(在行:Cursor c = sqlBuilder.query ...)。谁知道这里有什么问题?

非常感谢

0 个答案:

没有答案