Java NoClassDefFoundError异常android joda时间
我正在构建一个应用程序,并在其中使用Joda Time,而不是java内置的日期/时间类。但我面临一个问题,当我使用 Android-API 22运行良好,但当我使用Android-API 23编译它时,它抛出NoClassDefFoundError异常。 我的构建。gradle正在跟踪Java NoClassDefFoundError异常android joda时间,java,android,jodatime,Java,Android,Jodatime,我正在构建一个应用程序,并在其中使用Joda Time,而不是java内置的日期/时间类。但我面临一个问题,当我使用 Android-API 22运行良好,但当我使用Android-API 23编译它时,它抛出NoClassDefFoundError异常。 我的构建。gradle正在跟踪 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion '23.0.2'
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '23.0.2'
defaultConfig {
multiDexEnabled true
applicationId 'com.my.app'
minSdkVersion 11
targetSdkVersion 23
versionCode 6
versionName '5.0.1'
}
buildTypes {
release {
//runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
sourceSets {
main {
assets.srcDirs = ['src/main/assets', 'src/main/assets/downloadMusicMishari', 'src/main/assets/downloadmusicSaad']
}
}
dexOptions {
incremental true
javaMaxHeapSize "4g"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//compile 'com.android.support:support-v4:20.0.0'
compile project(':facebook')
compile project(':library')
compile files('libs/PayPalAndroidSDK-2.9.10.jar')
compile files('libs/picasso-2.5.2.jar')
compile project(':justifiedTextViewmaster')
compile 'joda-time:joda-time:2.3'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.google.android.gms:play-services:8.3.0'
compile 'com.android.support:multidex:1.0.0'
}
repositories {
mavenCentral()
}
这是错误的屏幕截图。
NoClassDefFoundError 如果Java虚拟机或类加载器实例尝试 加载类的定义(作为普通方法调用的一部分 或者作为使用新表达式创建新实例的一部分)和 可以找到该类的定义 当前执行时已存在搜索的类定义 类已编译,但无法再找到该定义 请考虑使用专门为Android设计的JoDA库。您可能会问,为什么要使用此库而不是其他库。另一个有一个特别的问题。ie由于使用了
ClassLoader.getResourceAsStream()
,它极大地增加了应用程序的内存占用。(有关更多详细信息,请参阅。)此库避免了Android的问题
此外,该库还为Android设计了额外的实用程序。例如,请参见Android的一个端口
尝试更改编译'joda time:joda time:2.3'
到:编译'net.danlew:android.joda:2.9.1'
这很有效。我正在SDK 23的应用程序中使用它
编辑1
如果它是ISO8601格式,那么即使不使用Joda也可以解析它。这样:
try {
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
Date result = format.parse("2015-05-19T04:00:00.000Z");
Calendar cal = Calendar.getInstance();
cal.setTime(result);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
output = day+" "+month+" "+year;
Log.w("THE DATE IS:",""+output);
}
catch (Exception e){e.printStackTrace();}
NoClassDefFoundError 如果Java虚拟机或类加载器实例尝试 在类的定义中加载(作为普通方法调用的一部分或 作为使用新表达式创建新实例的一部分)和 可以找到该类的定义 请检查 尝试:
dependencies {
compile 'net.danlew:android.joda:2.9.2' // For API Level 23 or Above
}
然后清理重建您的IDE
编辑
Removed Joda plugin
确保您初始化了JodaTimeAndroid.init(这个)代码>
完成后,您必须在使用库之前初始化库
调用JodaTimeAndroid.init()。我建议把这个代码放进去
Application.onCreate():
最终编辑
Removed Joda plugin
你错过了一些要添加到类路径中的JAR,请将这些类添加到类路径中。@Naveenshryan我不太明白你的意思?右键单击你添加的库,有一个名为“添加到类路径”的选项单击该选项,我不确定它是否有效,但请再试一次,这个异常是因为这些类在编译时可用,但运行时JVM无法找到这些类,所以抛出这个异常。@Naveenshryan感谢您的评论。如果有帮助,我会告诉你的。如果有帮助,请告诉我。谢谢你的建议。我正在尝试它,并会让你知道,如果它有帮助,它没有工作应用程序崩溃与相同的例外你需要初始化Joda之前使用它?是你做的吗?是的,我现在正在尝试。就连我在建设项目时也经历过这种情况!目前还没有解决方案!谢谢你的建议。我正在尝试,如果成功,我会让你知道works@Tahir你在你的
应用程序中调用过这个吗
顺便说一句,在我迁移到API 23之前,我的应用程序在构建过程中花费了很多时间,比如超过10分钟,它总是在一分钟内构建。你认为问题出在哪里?不,还没有,我正在寻找一种不需要使用Joda插件的方法。我已经解决了我的问题,但我已经删除了Joda插件。谢谢你的帮助