Android中的NoClassDefFondError ...但该类位于Classpath中包含的一个jar中
Posted
技术标签:
【中文标题】Android中的NoClassDefFondError ...但该类位于Classpath中包含的一个jar中【英文标题】:NoClassDefFondError in Android... but the Class is in one jar included in the Classpath 【发布时间】:2012-04-21 16:23:47 【问题描述】:我正在开发一个 android 应用程序。它必须能够拍照,并将该照片发送到网页。这是代码:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("someurl");
MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); //Here throws the exception
multipartEntity.addPart("data",
new InputStreamBody(
new ByteArrayInputStream(byteArray),
"image/png"));
multipartEntity.addPart("caption", new StringBody(filename));
httpPost.setEntity((HttpEntity) multipartEntity);
我的 ClassPath 中有所需的库(httpclient、apache-mime4j-core、httpcore 和 httpmime)。它在编译时没有显示任何错误。但是,当我运行该项目时,它显示“java.lang.NoClassDefFoundError: org.apache.http.entity.mime.MultipartEntity”但该类确实存在于罐子中(确切地说是在 httpMime 中)。这是完整的跟踪:
04-09 10:21:59.362: E/AndroidRuntime(10352): FATAL EXCEPTION: main
04-09 10:21:59.362: E/AndroidRuntime(10352): java.lang.NoClassDefFoundError: org.apache.http.entity.mime.MultipartEntity
04-09 10:21:59.362: E/AndroidRuntime(10352): at com.publidirecta.AppAzafata.IniciarGPSActivity2.enviarImagen(IniciarGPSActivity2.java:206)
04-09 10:21:59.362: E/AndroidRuntime(10352): at com.publidirecta.AppAzafata.IniciarGPSActivity2.onActivityResult(IniciarGPSActivity2.java:196)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.app.Activity.dispatchActivityResult(Activity.java:3908)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.app.ActivityThread.deliverResults(ActivityThread.java:2549)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.app.ActivityThread.handleSendResult(ActivityThread.java:2595)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.app.ActivityThread.access$2000(ActivityThread.java:121)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:973)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.os.Handler.dispatchMessage(Handler.java:99)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.os.Looper.loop(Looper.java:130)
04-09 10:21:59.362: E/AndroidRuntime(10352): at android.app.ActivityThread.main(ActivityThread.java:3701)
04-09 10:21:59.362: E/AndroidRuntime(10352): at java.lang.reflect.Method.invokeNative(Native Method)
04-09 10:21:59.362: E/AndroidRuntime(10352): at java.lang.reflect.Method.invoke(Method.java:507)
04-09 10:21:59.362: E/AndroidRuntime(10352): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
04-09 10:21:59.362: E/AndroidRuntime(10352): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
04-09 10:21:59.362: E/AndroidRuntime(10352): at dalvik.system.NativeStart.main(Native Method)
我已尝试使用此任务中使用的所有 jar 的旧版本,但它仍然无法正常工作。这些 jar 确实出现在 Android 项目的“引用的库”中。
我什么都试过了。有人知道为什么会这样吗?我正要扑向窗户。
提前谢谢你!
【问题讨论】:
创建另一个新项目,并将这些类复制到该项目中,然后重试... 查看这个可能对您有帮助的答案 | ***.com/a/10046725/1289716 我刚刚有了这个,Eclipse 让我引用该文件,但是当它运行时,错误!我刚刚重新编译并且它起作用了.... 【参考方案1】:您需要在您的项目中创建一个名为libs
的文件夹,并将您引用的jar 复制到该文件夹中。
【讨论】:
别忘了 Project > Clean 放入 libs 文件夹后。 我也做了同样的事情,但我总是遇到 java.lang.NoClassDefFoundError: org.apache.http.entity.mime.HttpMultipart【参考方案2】:自动更新不成功,我下载了最新最好的。但是找不到 MultipartEntity 类。我将它重新添加到项目中。我确定它在一个名为“libs”的文件夹中——但没有运气。安东的提示我检查项目偏好。 Project Properties -> Java Build Path -> Order and Export:确保选中 Android Private Libraries。 (我都检查了)。清理你的项目。问题消失了。
【讨论】:
就我而言,只有httpmime
必须在“订购和导出”中进行检查;项目清理后,问题消失了!【参考方案3】:
太奇怪了,我的应用程序已经在“lib”中有文件并且发生了这个崩溃。我按照 idiottiger 的回复将其重命名为“libs”,并且成功了。
【讨论】:
同样的结果。感谢 idiottiger,感谢 Eclipse 又浪费了我生命中的两个小时!【参考方案4】:在 Eclipse 中为您的项目打开属性。并打开 Order and Export,确保选择了您需要的所有库。然后单击项目>清理。最后,你的问题应该解决了。
【讨论】:
【参考方案5】:我今天遇到了一些问题:
a) 我将所有 jar 文件放到 libs 目录中,然后右键单击 Project > Build Path > Add external jars > 选择 jar 文件。然后去“订购和出口”,仍然有问题。 b) 结果表明 httpclient-4.3.1.jar 和 httpmime-4.3.1.jar 还不够。我还需要添加 httpcore-4.3.jar。
这摆脱了错误! :D 我今天花了将近 4 个小时试图解决这个问题:(
【讨论】:
【参考方案6】:我解决了同样的问题:
在您面临的项目中打开 pom.xmljava.lang.NoClassDefFoundError: org/apache/http/entity/mime/MultipartEntityBuilder
李>在依赖项下,添加这段代码。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.2</version>
<scope>test</scope>
</dependency>
清理并重建代码。
它会起作用的。
【讨论】:
以上是关于Android中的NoClassDefFondError ...但该类位于Classpath中包含的一个jar中的主要内容,如果未能解决你的问题,请参考以下文章
android 6中的android webview youtube视频中的全屏模式问题
android权限--android开发中的权限及含义(上)
FrameLayout 中的 'android:foreground' 和 'android:foregroundGravity' 如何影响其外观?
Android - 将参数传递给 Android 应用程序中的 RESTful URL