3

During android vogella tutorial regarding to sqlite I have encountered annoying problem with following error:

09-05 09:18:06.127: E/AndroidRuntime(981): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.android.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.android.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.android.todos-1, /system/lib]]

I followed many times step by step modyfying all files to have R. class properly recreated. The very strange thing about this errror is that I have no idea why there is anything about "com.example" in "com.example.de.vogella.android". Is this some kind of standard generated name? All my packages/names/paths never started with "com.example"(In this project). I checked all files and cant find issue.

More output from LogCat:

09-05 09:18:06.127: E/AndroidRuntime(981): FATAL EXCEPTION: main
09-05 09:18:06.127: E/AndroidRuntime(981): java.lang.RuntimeException: Unable to get provider com.example.de.vogella.android.todos.contentprovider.MyTodoContentProvider: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.android.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.android.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.android.todos-1, /system/lib]]
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.app.ActivityThread.installProvider(ActivityThread.java:4882)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.app.ActivityThread.installContentProviders(ActivityThread.java:4485)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.app.ActivityThread.access$1300(ActivityThread.java:141)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.os.Looper.loop(Looper.java:137)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.app.ActivityThread.main(ActivityThread.java:5103)
09-05 09:18:06.127: E/AndroidRuntime(981):  at java.lang.reflect.Method.invokeNative(Native Method)
09-05 09:18:06.127: E/AndroidRuntime(981):  at java.lang.reflect.Method.invoke(Method.java:525)
09-05 09:18:06.127: E/AndroidRuntime(981):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-05 09:18:06.127: E/AndroidRuntime(981):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-05 09:18:06.127: E/AndroidRuntime(981):  at dalvik.system.NativeStart.main(Native Method)
09-05 09:18:06.127: E/AndroidRuntime(981): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.android.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.android.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.android.todos-1, /system/lib]]
09-05 09:18:06.127: E/AndroidRuntime(981):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
09-05 09:18:06.127: E/AndroidRuntime(981):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
09-05 09:18:06.127: E/AndroidRuntime(981):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
09-05 09:18:06.127: E/AndroidRuntime(981):  at android.app.ActivityThread.installProvider(ActivityThread.java:4867)
09-05 09:18:06.127: E/AndroidRuntime(981):  ... 12 more
09-05 09:18:06.156: E/ActivityThread(950): Failed to find provider info for de.vogella.android.todos.contentprovider

In generall application starts but gets crash from the beginning with output:

Unfortunatelly, {AppName} has stopped.

My AndroidManifest.xml looks like this

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.vogella.android.todos"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="13"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/reminder"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".TodosOverviewActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".TodoDetailActivity"
            android:windowSoftInputMode="stateVisible|adjustResize"
            android:label="@string/title_activity_todo_detail" >
        </activity>

        <provider
            android:name=".contentprovider.MyTodoContentProvider"
            android:authorities="de.vogella.android.todos.contentproviderxxxxxxx" >
        </provider>
    </application>

</manifest>

I have just started with android so I guese there is something trivial missing.

Thanks a lot.

EDIT Change of <provider> to:

<provider
            android:name=".contentprovider.MyTodoContentProvider"
            android:authorities="de.vogella.android.todos.contentprovider" >
        </provider>

results in :

Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
Please check logcat output for more details.
Launch canceled!

with LogCat:

09-06 02:02:38.198: E/AndroidRuntime(864): FATAL EXCEPTION: main
09-06 02:02:38.198: E/AndroidRuntime(864): java.lang.RuntimeException: Unable to get provider com.example.de.vogella.android.todos.contentprovider.MyTodoContentProvider: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.android.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.android.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.android.todos-1, /system/lib]]
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.app.ActivityThread.installProvider(ActivityThread.java:4882)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.app.ActivityThread.installContentProviders(ActivityThread.java:4485)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.app.ActivityThread.access$1300(ActivityThread.java:141)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.os.Looper.loop(Looper.java:137)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.app.ActivityThread.main(ActivityThread.java:5103)
09-06 02:02:38.198: E/AndroidRuntime(864):  at java.lang.reflect.Method.invokeNative(Native Method)
09-06 02:02:38.198: E/AndroidRuntime(864):  at java.lang.reflect.Method.invoke(Method.java:525)
09-06 02:02:38.198: E/AndroidRuntime(864):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-06 02:02:38.198: E/AndroidRuntime(864):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-06 02:02:38.198: E/AndroidRuntime(864):  at dalvik.system.NativeStart.main(Native Method)
09-06 02:02:38.198: E/AndroidRuntime(864): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.android.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.android.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.android.todos-1, /system/lib]]
09-06 02:02:38.198: E/AndroidRuntime(864):  at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
09-06 02:02:38.198: E/AndroidRuntime(864):  at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
09-06 02:02:38.198: E/AndroidRuntime(864):  at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
09-06 02:02:38.198: E/AndroidRuntime(864):  at android.app.ActivityThread.installProvider(ActivityThread.java:4867)
09-06 02:02:38.198: E/AndroidRuntime(864):  ... 12 more
09-06 02:02:38.236: E/ActivityThread(834): Failed to find provider info for de.vogella.android.todos.contentprovider
4

4 回答 4

10

我曾经遇到过这个问题。该代码以前可以工作,但当我同步并构建旧版本的代码时,它突然停止工作(应用程序启动时崩溃)。

修复方法是关闭并重新启动 Eclipse 并清理项目并清理所有依赖库项目。然后它又开始正常工作了。

刷新项目文件时,这是 Eclipse 中的某种构建问题。

更新:特别是,如果您不小心修改了“.classpath”文件(以恢复到旧版本),Eclipse/Android SDK 可能会感到困惑并且无法正确构建项目。当您重新启动 Eclipse 并清理项目时,Eclipse 将重新修改“.classpath”文件,并正确构建。

于 2013-12-06T10:35:33.083 回答
1

更改代码中的这一行:

<provider
        android:name="de.vogella.android.todos.contentprovider.MyTodoContentProvider"
        android:authorities="de.vogella.android.todos.contentproviderxxxxxxx" >
</provider>


你的问题将得到解决。

于 2013-09-05T13:54:21.763 回答
1

不要忘记在您的清单中声明内容提供者。

于 2013-09-05T13:54:43.293 回答
0

没有 com.example 不是标准的包名,它是根据位于项目根目录的AndroidManifest.xml文件生成的。

在清单文件中有一个名为 package 的属性,它为应用程序提供了一个唯一的名称。

请检查清单文件,据我所知,将属性修复为

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.vogella.android.todos"
于 2013-09-05T13:55:34.063 回答