Почему мой ContentProvider неизвестен? - PullRequest
0 голосов
/ 18 ноября 2011

AndroidManifest.xml

 <!-- Provides search suggestions for addresses -->
 <provider android:name="com.my.app.provider.SearchAddressProvider"
              android:authorities="com.my.app.provider.SearchAddressProvider" />

секция <manifest ... >

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.app" android:versionCode="1"
android:versionName="1.0">

Из класса моего провайдера SearchAddressProvider

 public static final String KEY_ADDRESS_1 = SearchManager.SUGGEST_COLUMN_TEXT_1;
 public static final String KEY_ADDRESS_2 = SearchManager.SUGGEST_COLUMN_TEXT_2;
 public static final String KEY_MARKER = SearchManager.SUGGEST_COLUMN_ICON_1;
 public static final String KEY_FAVORITE = SearchManager.SUGGEST_COLUMN_ICON_2;

 private static String AUTHORITY = "com.my.app.provider.SearchAddressProvider";
 public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
        + "/searchaddress");
 private static final UriMatcher uriMatcher = buildUriMatcher();

 ....

 @Override
public String getType(Uri uri) {
    switch (uriMatcher.match(uri)) {
    case SEARCH_WORDS:
        return WORDS_MIME_TYPE;
    case GET_WORD:
        return DEFINITION_MIME_TYPE;
    case SEARCH_SUGGEST:
        return SearchManager.SUGGEST_MIME_TYPE;
    default:
        throw new IllegalArgumentException("Unknown URL " + uri);
    }
}

еще в моей деятельности, которая вызывает этот класс с этими определениями, с помощью этой команды:

 Cursor cursor = managedQuery(SearchAddressProvider.CONTENT_URI, null, null, new String[] {query}, null);

Я получаю IllegalArgumentException Unknown URI

это проблема для меня, решение?

1 Ответ

3 голосов
/ 19 ноября 2011

Ваш код:

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

/**
 * Builds up a UriMatcher for search suggestion and shortcut refresh
 * queries.
 */
private static UriMatcher buildUriMatcher() {
    UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
    // to get definitions...
    matcher.addURI(AUTHORITY, "dictionary", SEARCH_WORDS);
    matcher.addURI(AUTHORITY, "dictionary/#", GET_WORD);
    // to get suggestions...
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY,
                    SEARCH_SUGGEST);
    matcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*",
                    SEARCH_SUGGEST);

    return matcher;
}

Обратите внимание, ваш UriMatcher не поддерживает searchaddress, вместо этого он работает с dictionary. Поэтому я думаю, что CONTENT_URI следует изменить на:

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