Creating & using ContentProvider for android

拟墨画扇 提交于 2019-12-14 03:53:01

问题


When I call an Android ContentProvider I get the following exception:

java.lang.RuntimeException: Unable to start activity ComponentInfo{de.harm.android.couchone/de.harm.android.couchone.CouchContactClient}: java.lang.IllegalArgumentException: Unknown URL content://de.harm.android.couchone.provider/test2

These are the projects:

  • https://github.com/der-harm/CouchOneProvider
  • .../CouchOneContacts

Android uses the so-called ContentResolver to communicate with ContentProvider which in turn handles the persistence functionality - accessing the database.

The ContentProvider registers itself with a unique Uri. The ContentResolver calls the ContentProvider with this Uri and passes additional data, like a SQL query string and/or data to be saved.

In the CouchOneProvider/AndroidManifest.xml I have the following:

<provider android:authorities="de.harm.android.couchone.provider"
   android:name=".Provider" />

The Provider uses

static {
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(PROVIDER_NAME, DB_Name, URI_COLLECTION);
    uriMatcher.addURI(PROVIDER_NAME, DB_Name + "/#", URI_ENTITY);
}

and

public static boolean isCollectionUri(Uri uri) {
    return uriMatcher.match(uri) == URI_COLLECTION;
}

to process the CONTENT_URI used by the ContentResolver to call the ContentProvider:

  • Am I missing permissions in any of both AndroidManifest.xml?
  • Am I defining the authority in AndroidManifest.xml wrongly?
  • Is the CONTENT_URI wrong?

Update:

I have additional information:

Logcat says:

Failed to find provider info for de.harm.android.couchone.provider

This should be the starting point. But so far I couldn't find any solution.

The fully qualified classname of the ContentProvider implementation is:

de.harm.android.couchone.Provider

In AndroidManifext.xml exactly this is specified as authority, except for the name being to lower case, but this should be fine.

The package name is defined previously in the xml file, so ".Provider" should be ok, too.

As to be seen in the exception, the client calls:

content://de.harm.android.couchone.provider/test2

Logcats answer is:

Failed to find provider info for de.harm.android.couchone.provider

I don't see what's missing, perhaps it's Eclipse or emulator problem?

I install the provider as "run project as Android application".


回答1:


I have resolved this problem:

Both projects had the same package structure. I changed de.harm.android.couchone to de.harm.android.couchone.provider and de.harm.android.couchone.client.




回答2:


I think this link is related to question topic. How to implement a custom content-provider.



来源:https://stackoverflow.com/questions/4404689/creating-using-contentprovider-for-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!