Maybe my inexperience will help someone else with this mistake. It was completely mysterious to me, but, like everything in computers, it is obvious when you know.
I followed this tutorial, which is generally very good: http://www.vogella.com/tutorials/AndroidSQLite/article.html
At the beginning, he says to create a package called "contentprovider", and then the class inside it "MyTodoContentProvider". Now anyone who is familiar with Java-style naming conventions would see that this should apply to the main package. But I was new to this, so I created it on the side somewhere.
Everywhere, building the code, everything worked fine. Eclipse found and included this package and found no errors. Then there was a failure and the critical message "Unable to get provider." The path in the error message that I now understood was the nonexistent path in which the code looked for the class was so long and contained so many iterations of the “contentprovider” that it was difficult to understand what this was about or what was wrong.
I suspected that the problem was in the manifest file, but I was sure that it was in “android: authority”. It was a little unintuitive. The line in this element in the manifest corresponds to the public member that you expose in your provider class. This member is called "CONTENT_URI". But these two do not exactly match. For instance:
private static final String AUTHORITY = "com.vegnab.provider"; private static final String BASE_PATH = "todos"; public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH);
It ends with:
CONTENT_URI = "content://com.vegnab.provider/todos"
(Please note that AUTHORITY is itself a private member, and not accessible externally.)
The corresponding manifest line will look like this:
android:authorities="com.vegnab.provider"
This is the middle part between the "content: //" schema and the base path.
The problem was in the manifest line:
android:name=".contentprovider.MyTodoContentProvider"
I had an error-free class named "MyTodoContentProvider" in a package called "contentprovider", so what's the problem? The problem was that the package was in the wrong place. It was assumed that it will relate to the main packaging. What the dot means is first in the title. It should follow the same syntax as the android: name lines in its sections of the manifest.
If you find this helpful, please be one. Once you solve this problem, it's easy to forget how mysterious it was.