Eclipse出现Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable

本文解决在Android开发过程中遇到的使用RecyclerView组件时,因组件版本不一致导致应用启动失败的问题。通过分析错误日志,发现与支持库版本不匹配有关,最终确认为RecyclerView组件版本问题,并提供了正确的解决方案。

在eclipse中使用RecyclerView,编译没有问题,但是运行时候会出现如下错误,百思不得其解,又说v4包与v7包版本不一致,有说没有导入v7-compat包的,经反复实验,得出结论跟v4包、v7compat包都没有关系,跟recyclerview的版本有关系,eclipse只能导入21.0.0的才可以使用。

07-12 10:38:24.331: E/AndroidRuntime(16862): FATAL EXCEPTION: main
07-12 10:38:24.331: E/AndroidRuntime(16862): Process: com.example.recyclerdemo, PID: 16862
07-12 10:38:24.331: E/AndroidRuntime(16862): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.recyclerdemo/com.example.recyclerdemo.MainActivity}: android.view.InflateException: Binary XML file line #6: Error inflating class android.support.v7.widget.RecyclerView
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2224)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2283)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.ActivityThread.access$800(ActivityThread.java:144)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.os.Handler.dispatchMessage(Handler.java:102)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.os.Looper.loop(Looper.java:136)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.ActivityThread.main(ActivityThread.java:5153)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at java.lang.reflect.Method.invokeNative(Native Method)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at java.lang.reflect.Method.invoke(Method.java:515)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at dalvik.system.NativeStart.main(Native Method)
07-12 10:38:24.331: E/AndroidRuntime(16862): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class android.support.v7.widget.RecyclerView
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.view.LayoutInflater.createView(LayoutInflater.java:621)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:697)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:756)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.Activity.setContentView(Activity.java:1965)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at com.example.recyclerdemo.MainActivity.onCreate(MainActivity.java:19)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.Activity.performCreate(Activity.java:5356)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2181)
07-12 10:38:24.331: E/AndroidRuntime(16862):    ... 11 more
07-12 10:38:24.331: E/AndroidRuntime(16862): Caused by: java.lang.reflect.InvocationTargetException
07-12 10:38:24.331: E/AndroidRuntime(16862):    at java.lang.reflect.Constructor.constructNative(Native Method)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.view.LayoutInflater.createView(LayoutInflater.java:595)
07-12 10:38:24.331: E/AndroidRuntime(16862):    ... 22 more
07-12 10:38:24.331: E/AndroidRuntime(16862): Caused by: java.lang.NoClassDefFoundError: android.support.v7.recyclerview.R$styleable
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:434)
07-12 10:38:24.331: E/AndroidRuntime(16862):    at android.support.v7.widget.RecyclerView.<init>(RecyclerView.java:404)
07-12 10:38:24.331: E/AndroidRuntime(16862):    ... 25 more

正确:
在android-sdk/extras/android/m2repository/com/android/support/recyclerview-v7目录下根据版本号21.0.0目录可以找到一个名为recyclerview-v7-21.0.0.aar的文件。解压此文件里面有classes.jar,引用此jar包。
错误
在android-sdk/extras/android/support/v7/recyclerview目录下面有libs,里面有jar包,引用此jar包。

### 关于 `NoClassDefFoundError` 异常的解决方案 在 Eclipse 中遇到 `java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileUploadException` 的问题通常是由于缺少必要的 JAR 文件或配置不正确引起的。以下是详细的分析和解决方法: #### 1. 缺少依赖库 该异常表明运行时环境中未找到 `commons-fileupload.jar` 库中的类 `FileUploadException`。这通常是因为项目中未引入此库或者构建路径设置有误。 可以通过以下方式解决问题: - **手动添加 JAR 文件** 如果项目不是基于 Maven 或 Gradle 构建,则需要手动下载并导入 `commons-fileupload.jar` 和其依赖项 `commons-io.jar` 到项目的构建路径中[^3]。 ```plaintext https://repo.maven.apache.org/maven2/commons-fileupload/commons-fileupload/1.3.2/ ``` 将这两个 JAR 文件放入项目的 `/lib` 目录下,并通过右键单击项目 -> Build Path -> Configure Build Path -> Libraries -> Add External JARs 将它们添加到构建路径中。 - **Maven 配置** 如果是 Maven 项目,可以在 `pom.xml` 文件中添加如下依赖声明来自动管理这些库[^4]: ```xml <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> ``` 执行 `mvn clean install` 命令刷新依赖后即可正常使用。 #### 2. 运行环境与部署冲突 即使开发环境下一切正常,但如果目标服务器上缺失上述 JAR 文件也可能引发同样的错误。因此需确认应用打包后的 WAR 文件已包含所需依赖[^2]。 对于 Tomcat 等 Servlet 容器来说,建议将第三方库放置在其全局 lib 路径 (`$TOMCAT_HOME/lib`) 下以供所有 Web 应用共享;当然更推荐的方式还是让每个独立的应用自行携带自己的私有版本以防不同版本间产生兼容性矛盾。 #### 3. 清理缓存重试 有时 IDE 自身可能存在某些元数据损坏的情况从而影响到了正常的编译链接流程。尝试清理工作区再重新加载工程往往能有效缓解此类状况: - 在菜单栏选择 Project->Clean... 来清除现有对象; - 删除 .metadata 文件夹下的相关内容(注意备份重要资料后再操作); - 如果仍然存在问题可以考虑重建整个 workspace 结构。 --- ### 示例代码片段验证修复效果 下面给出一段简单的 Struts 文件上传功能实现作为测试依据确保问题已被妥善处理完毕: ```java import org.apache.struts.upload.FormFile; public class UploadAction extends Action { private FormFile myFile; public String execute() throws Exception{ InputStream inputStream = null; try{ byte[] buffer=new byte[(int)this.myFile.getFileSize()]; inputStream=this.myFile.getInputStream(); int length=inputStream.read(buffer); // Save the uploaded file somewhere... }finally{ if(inputStream!=null){ inputStream.close(); } } return SUCCESS; } public void setMyFile(FormFile myFile){ this.myFile=myFile; } } ``` 以上代码假设已经成功解决了之前提到过的 ClassNotFound 错误之后能够顺利运行无阻塞现象发生。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值