activeandroid在android5.0报IncompatibleClassChangeError错误

原创 2017年01月10日 15:55:39

接手的项目中,之前负责的同事用了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());

* 编译,运行,顺利搞定! *

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android中常见的异常

从网上摘录了一些Android中常见的异常,希望对大家有所帮助。。。
  • as_csdn
  • as_csdn
  • 2016年03月29日 19:59
  • 2042

Android 修改multiDexEnabled true后友盟显示java.lang.IncompatibleClassChangeError的一种解决方案

今天遇见了一个比较坑的问题,我会把问题描述一下,供以后查阅。 因为自己的项目方法超过了65536个,我必须在项目里加入multiDexEnabled true,才可以继续编包,但是这个时候,发现友盟...
  • y505772146
  • y505772146
  • 2017年03月20日 19:24
  • 5425

jar包问题的解决:java.lang.IncompatibleClassChangeError

摘要 在集成多maven项目的时候,出现了这个错,于是记录下解决的过程。 今天整理了Maven的pom.xml文件后,把多个项目用maven集成在了一起,结果在启动Tomcat的时候,遇到一个奇葩的错...
  • w1014074794
  • w1014074794
  • 2016年09月07日 09:51
  • 2229

关于java.lang.IncompatibleClassChangeError: Implementing class错误解决

在尝试elastic-job 分布式任务时,跑example代码,任务正常启动。把example迁移到我们自己的应用后,发现无法启动,报错如下: Exception in thread "main" ...
  • yaowj2
  • yaowj2
  • 2015年11月26日 18:40
  • 18068

java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetada

异常如下: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate compo...
  • begin27
  • begin27
  • 2016年04月23日 14:09
  • 4529

IncompatibleClassChangeError

今天遇到了IncompatibleClassChangeError ,我把我原来的一个类改成了接口,但是类名没有变,然后写一个类去实现这个接口.当我重新运行之后,JVM告诉我在其它类调用了这个接口的方...
  • xumingming64398966
  • xumingming64398966
  • 2007年07月28日 17:26
  • 5257

IncompatibleClassChangeError

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component c...
  • u013434493
  • u013434493
  • 2014年12月30日 14:19
  • 504

解决java.lang.IncompatibleClassChangeError

今天整理了Maven的pom.xml文件后,把多个项目用maven集成在了一起,结果在启动Tomcat的时候,遇到一个奇葩的错误: 严重: Servlet [spring] in web app...
  • znit2003
  • znit2003
  • 2017年06月13日 16:54
  • 728

java.lang.IncompatibleClassChangeError错误的解决

java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but ...
  • u010670689
  • u010670689
  • 2014年09月12日 10:21
  • 4424

一个java.lang.IncompatibleClassChangeError的问题解决

一个java.lang.IncompatibleClassChangeError的问题解决   王小明123 发布时间: 2015/08/05 17:02 阅读: 707...
  • evilcry2012
  • evilcry2012
  • 2016年08月11日 21:45
  • 7195
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:activeandroid在android5.0报IncompatibleClassChangeError错误
举报原因:
原因补充:

(最多只允许输入30个字)