activeandroid在android5.0报IncompatibleClassChangeError错误
来源:互联网 发布:淘宝模块代码 编辑:程序博客网 时间:2024/06/04 23:27
接手的项目中,之前负责的同事用了ActiveAndroid的数据库开源框架,原本在android4.2和android5.0的系统上用得好好的。可是最近要求更换中间件,而中间件中依赖了httpcore和httpmime,结果就导致了ActiveAndroid闪退了。
java.lang.IncompatibleClassChangeError: org.apache.http.params.SyncBasicHttpParams at dalvik.system.DexFile.defineClassNative(Native Method) at dalvik.system.DexFile.defineClass(DexFile.java:226) at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219) at dalvik.system.DexPathList.findClass(DexPathList.java:321) at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:308) at com.activeandroid.ModelInfo.scanForModelClasses(ModelInfo.java:187) at com.activeandroid.ModelInfo.scanForModel(ModelInfo.java:152) at com.activeandroid.ModelInfo.<init>(ModelInfo.java:63) at com.activeandroid.Cache.initialize(Cache.java:66) at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:44) at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:34) at com.activeandroid.ActiveAndroid.initialize(ActiveAndroid.java:30) at com.eebbk.syncpointread.base.EnglishReadApplication$14.run(EnglishReadApplication.java:254) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818)
在GitHub上查看了ActiveAndroid的源码,确实是不依赖其他,然而为什么会报这个问题呢?
IncompatibleClassChangeError 从字面理解应该不兼容的类改变引起的错误,因为是更换中间件从而增加了httpcore和httpmime的依赖,所以可以确定是这两个重复了。但是因为是中间件依赖的,不能单纯的去掉,那么是否可以从其他方面规避这个问题,从而使ActiveAndroid正常初始化呢?
通过查看ActiveAndroid 的源码可以知道,ActiveAndroid 有三种初始化方式:
public static void initialize(Context context) { initialize((new Builder(context)).create());}public static void initialize(Configuration configuration) { initialize(configuration, false);}public static void initialize(Context context, boolean loggingEnabled) { initialize((new Builder(context)).create(), loggingEnabled);}public static void initialize(Configuration configuration, boolean loggingEnabled) { setLoggingEnabled(loggingEnabled); Cache.initialize(configuration);}
原来是通过
ActiveAndroid.initialize(context);
初始化ActiveAndroid。
换成用以下方式初始化:
Configuration.Builder configurationBuilder = new Configuration.Builder(context);configurationBuilder.addModelClass(Address.class); configurationBuilder.addModelClass(HardWord.class); ActiveAndroid.initialize(configurationBuilder.create());
* 编译,运行,顺利搞定! *
0 0
- activeandroid在android5.0报IncompatibleClassChangeError错误
- Android5.0以上版本ActiveAndroid报ClassNotFoundException错误
- Android5.0以上版本ActiveAndroid报ClassNotFoundException错误
- Android5.0以上版本ActiveAndroid报ClassNotFoundException错误
- jline2报IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected错误的解决方法
- 多dex打包时在 android5.0一下报错的问题 ,有谁能解决
- android5.1真机调试报找不到so的错误
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- IncompatibleClassChangeError
- Android5.0以下报NoClassDefFoundError解决方法
- ActiveAndroid
- android5.0源码编译错误小结
- java.lang.NoClassDefFoundError:Android5.0以下错误
- java.lang.IncompatibleClassChangeError错误的解决
- Android studio包冲突错误 IncompatibleClassChangeError
- 将Eclipse代码导入到Android Studio的两种方式
- 动态生成 ul 的li jquery 点击事件无法获取到li
- [生存志] 第107节 秦灭六国兼并天下
- 几种光源
- JVM内存划分
- activeandroid在android5.0报IncompatibleClassChangeError错误
- 自定义UITableViewCell(registerNib: 与 registerClass: 的区别)
- C# Selenium学习(一)-准备工作
- 完全背包
- 【DRP】拦截器Filter的使用
- C#79课的主要内容
- kerberos认证原理---讲的非常细致,易懂
- 网络安全法通过30天后京东数据库泄露,这是巧合?
- 常用函数