2016-03-08 3 views
2

Я создаю приложение и использую Joda Time вместо него, а java построен в классах Date/Time. но я столкнулся с проблемой, когда я скомпилировать приложение с помощью Android API 22 он работает нормально, но когда я скомпилировать его с андроид API 23 он бросает NoClassDefFoundError исключение. Мой build.gradle следит заNoClassDefFoundError Exception android joda time

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() 
} 

и вот снимок экрана ошибки. enter image description here

+0

у пропустили некоторые банки, чтобы добавить в путь к классам, добавьте эти classess в .. –

+0

классам @NaveenShriyan, я не совсем понял тебя? – Tahir

+0

щелкните правой кнопкой мыши на библиотеках, которые вы добавили, и есть опция, называемая add to class path, нажимайте на нее, M не уверен, что она будет работать или нет, но попробуйте один раз. И это исключение является bec. Эти классы доступны во время компиляции, но время выполнения JVM не может найти эти классы, чтобы исключить это исключение. –

ответ

2

NoClassDefFoundError

отбрасывается, если виртуальная машина Java или экземпляр ClassLoader пытается загрузить в определении класса (как часть нормального вызова метода или как часть создания новый экземпляр с использованием нового выражения) и не может быть найдено определение класса .

Определение класса поиска было выполнено, когда выполняемый в настоящее время класс был скомпилирован, но определение больше не может быть найдено.

[See This]

Так считают использованием библиотеки Joda, которая специально предназначена для Android. Вы можете спросить, зачем использовать эту библиотеку, а не другую. Есть одна конкретная проблема с другой. т.е. из-за его использования ClassLoader.getResourceAsStream(), это сильно раздувает его объем памяти в приложениях. (Для получения дополнительной информации см. this blog post.) Эта библиотека позволяет избежать проблемы для Android.

Также в этой библиотеке есть дополнительные утилиты, предназначенные для Android. Например, см DateUtils, порт DateUtils.

Try Android меняющегося compile 'joda-time:joda-time:2.3'

к: compile 'net.danlew:android.joda:2.9.1'

Это хорошо работает. И я использую это в приложении с SDK 23!

EDIT 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();} 
+1

благодарит за вас совет. Я пытаюсь это сделать и сообщит вам, если это поможет – Tahir

+0

к сожалению, это не сработало сбой приложений с тем же исключением – Tahir

+0

Вам нужно инициализировать Joda перед его использованием? ты сделал это? – OBX

3

NoClassDefFoundError

Брошенный, если виртуальная машина Java или экземпляр ClassLoader пытается нагрузки в определении класса (как часть нормального вызова метода или как часть создания нового экземпляра с использованием нового выражения) и не может быть найдено определение класса .

Пожалуйста, проверьте Joda-Time library with Android specialization

Попробуйте с:

dependencies { 
    compile 'net.danlew:android.joda:2.9.2' // For API Level 23 or Above 
} 

Затем Гладко Rebuild Ваш IDE

Редактировать

убедитесь, что вы инициализировать JodaTimeAndroid.init(this);

После того, как это будет сделано, вы должны инициализировать библиотеку перед использованием его вызова JodaTimeAndroid.init(). Я предлагаю положить этот код в Application.onCreate():

public class YourApplicationClass extends Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     JodaTimeAndroid.init(this); 
    } 
} 

Final Edit

Removed Joda plugin 
+1

благодарит за это. Я пытаюсь это сделать и сообщит вам, если это сработает – Tahir

+0

@Tahir По вашему желанию –

+0

Не сработал, stille же проблема:/ – Tahir

Смежные вопросы