0

独自のContentProviderを作成しましたが、それを取得する方法がわかりません。getTypeメソッドを呼び出すときにnullを取得し続けます。

これが私のコードです:
CurrentPlacesMetaDataクラス:

public static final String AUTHORITY = "healthcare.management.elderly.providers.CurrentPlacesContentProvider";
public static final String CONTENT_TYPE_PLACES_LIST = "vnd.android.cursor.dir/vnd.healthcare.places";
public static final String CONTENT_TYPE_PLACES_ONE = "vnd.android.cursor.dir/vnd.healthcare.places#";

CurrentPlacesContentProviderクラス:

public static final Uri CONTENT_URI = Uri.parse("content://" 
        + CurrentPlacesMetaData.AUTHORITY + "/currentplaces");
static {
     sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
     sUriMatcher.addURI(CurrentPlacesMetaData.AUTHORITY, "places", PLACES_TYPE_LIST);
     sUriMatcher.addURI(CurrentPlacesMetaData.AUTHORITY, "places/#", PLACES_TYPE_ONE);
}
@Override
public String getType(Uri uri) {
    switch(sUriMatcher.match(uri)) {
        case PLACES_TYPE_LIST:
            return CurrentPlacesMetaData.CONTENT_TYPE_PLACES_LIST;
        case PLACES_TYPE_ONE:
            return CurrentPlacesMetaData.CONTENT_TYPE_PLACES_ONE;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
    }
}

ContentProviderを呼び出そうとするメソッド:

Uri uri = Uri.parse("content://healthcare.management.elderly.providers.CurrentPlacesContentProvider/currentplaces/places");
String str = context.getContentResolver().getType(uri)

strのnullを取得します。これは、おそらくuriが認識されていないことを示しています。それで、私はどこで間違ったのですか?前もって感謝します!

4

2 に答える 2

1

currentplacesURIマッチャーで照合している間、URIには最後の部分が含まれます places

コンテンツプロバイダーのuriマッチングには、次の形式を使用できます

private static final String AUTHORITY = "xxxxxxxxxxxxx";
private static final String COMMENT_BASE_PATH = "comment";

private static final int COMMENT = 100;
private static final int COMMENT_ID = 101;


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

private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
    sURIMatcher.addURI(AUTHORITY, COMMENT_BASE_PATH , COMMENT);
    sURIMatcher.addURI(AUTHORITY, COMMENT_BASE_PATH + "/*" , COMMENT_ID);
}

そして、 URI_COMMENT 好きな場所を参照することができます。

于 2012-08-09T05:47:11.460 に答える
1

を使用してContentProviderを呼び出すことができます。

Cursor c = managedQuery(uri, null, null, null, null);

ただし、managedQueryは非推奨になっているため、を使用する必要がありますCursorLoader。を使用する例を次に示しCursorLoaderます。

于 2012-08-09T05:30:42.163 に答える