安卓错误“由以下原因引起:java.lang.ClassNotFoundException:”
在关于sqlite的安卓 vogella教程中,我遇到了以下恼人的问题:
09-05 09:18:06.127: E/AndroidRuntime(981): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.安卓.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.安卓.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.安卓.todos-1, /system/lib]]
我多次循序渐进地修改所有文件,以便正确地重新创建R.class。关于这个错误非常奇怪的一点是,我不知道为什么在“com.example.de.vogella.安卓”中会出现“com.example”。这是某种标准生成的名称吗?我所有的包/名称/路径从未以“com.example”(在本项目中)开头。我检查了所有文件,找不到问题
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.安卓.todos.contentprovider.MyTodoContentProvider: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.安卓.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.安卓.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.安卓.todos-1, /system/lib]]
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.app.ActivityThread.installProvider(ActivityThread.java:4882)
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.app.ActivityThread.installContentProviders(ActivityThread.java:4485)
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.app.ActivityThread.access$1300(ActivityThread.java:141)
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.os.Handler.dispatchMessage(Handler.java:99)
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.os.Looper.loop(Looper.java:137)
09-05 09:18:06.127: E/AndroidRuntime(981): at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-05 09:18:06.127: E/AndroidRuntime(981): at com.安卓.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.安卓.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.安卓.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.安卓.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 安卓.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.安卓.todos.contentprovider
通常情况下,所有应用程序都会启动,但从一开始就因输出而崩溃:
Unfortunatelly, {AppName} has stopped.
我的AndroidManifest。xml看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
package="de.vogella.安卓.todos"
安卓:versionCode="1"
安卓:versionName="1.0" >
<uses-sdk
安卓:minSdkVersion="13"
安卓:targetSdkVersion="18" />
<application
安卓:allowBackup="true"
安卓:icon="@drawable/reminder"
安卓:label="@string/app_name"
安卓:theme="@style/AppTheme" >
<activity
安卓:name=".TodosOverviewActivity"
安卓:label="@string/app_name" >
<intent-filter>
<action 安卓:name="安卓.intent.action.MAIN" />
<category 安卓:name="安卓.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
安卓:name=".TodoDetailActivity"
安卓:windowSoftInputMode="stateVisible|adjustResize"
安卓:label="@string/title_activity_todo_detail" >
</activity>
<provider
安卓:name=".contentprovider.MyTodoContentProvider"
安卓:authorities="de.vogella.安卓.todos.contentproviderxxxxxxx" >
</provider>
</application>
</manifest>
我刚开始使用安卓系统,所以我觉得缺少了一些琐碎的东西
非常感谢
编辑
将<provider>
更改为:
<provider
安卓:name=".contentprovider.MyTodoContentProvider"
安卓:authorities="de.vogella.安卓.todos.contentprovider" >
</provider>
结果如下:
Installation error: INSTALL_FAILED_CONFLICTING_PROVIDER
Please check logcat output for more details.
Launch canceled!
使用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.安卓.todos.contentprovider.MyTodoContentProvider: java.lang.ClassNotFoundException: Didn't find class "com.example.de.vogella.安卓.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.安卓.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.安卓.todos-1, /system/lib]]
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.app.ActivityThread.installProvider(ActivityThread.java:4882)
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.app.ActivityThread.installContentProviders(ActivityThread.java:4485)
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.app.ActivityThread.handleBindApplication(ActivityThread.java:4425)
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.app.ActivityThread.access$1300(ActivityThread.java:141)
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.os.Handler.dispatchMessage(Handler.java:99)
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.os.Looper.loop(Looper.java:137)
09-06 02:02:38.198: E/AndroidRuntime(864): at 安卓.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.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
09-06 02:02:38.198: E/AndroidRuntime(864): at com.安卓.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.安卓.todos.contentprovider.MyTodoContentProvider" on path: DexPathList[[zip file "/data/app/com.example.de.vogella.安卓.todos-1.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.de.vogella.安卓.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 安卓.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.安卓.todos.contentprovider
# 1 楼答案
更改代码中的这一行:
你的问题会解决的
# 2 楼答案
我曾经有过这个问题。代码以前是有效的,当我同步并构建一个旧版本的代码时,它突然停止工作(在应用程序启动时崩溃)
修复方法是关闭并重新启动Eclipse,清理项目,清理所有依赖的库项目。然后它又开始正常工作了
在Eclipse中,刷新项目文件时会出现某种构建问题
更新:特别是,如果您不小心修改了“.classpath”文件(以恢复到旧版本),Eclipse/Android SDK可能会混淆,无法正确构建项目。当您重新启动Eclipse并清理项目时,Eclipse将重新修改“.classpath”文件,并正确构建
# 3 楼答案
没有通讯。示例不是标准的包名,它是根据AndroidManifest生成的。xml位于项目根目录下的文件
在清单文件中有一个名为package的属性,它为应用程序提供了一个唯一的名称
请检查清单文件,根据我的猜测,将包属性修复为
# 4 楼答案
别忘了在清单中声明内容提供者