Возникла проблема, пытаюсь загрузить файл XLSX и у меня выдает ошибку, хотя при загрузке XLS файла все нормально. Как это можно исправить? Вроде, как все подключил правильно.
Код загрузки файла:
FileInputStream file = new FileInputStream(new File(Global_variable.Uri_for_picker.getPath()));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
Gradle:
implementation 'org.apache.poi:poi:4.0.0'
implementation 'org.apache.poi:poi-ooxml:4.0.0'
implementation 'org.apache.poi:poi-ooxml-schemas:4.0.0'
implementation 'com.fasterxml:aalto-xml:1.0.0'
Ошибка:
> 12-26 14:50:55.041 10906-10906/com.example.jone1.navigation_drawer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jone1.navigation_drawer, PID: 10906
java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/xml/stream/XMLEventFactory;
at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.<clinit>(PackagePropertiesMarshaller.java:41)
at org.apache.poi.openxml4j.opc.OPCPackage.<init>(OPCPackage.java:140)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:103)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:298)
at org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:307)
at com.example.omen.serverforcofe.Fragment_service.onViewCreated(Fragment_service.java:366)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:993)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1153)
at android.app.BackStackRecord.run(BackStackRecord.java:806)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1565)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:487)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:768)
Caused by: java.lang.ClassNotFoundException: Didn't find class "javax.xml.stream.XMLEventFactory" on path: DexPathList[[zip file "/data/app/com.example.jone1.navigation_drawer-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.jone1.navigation_drawer-1/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.<clinit>(PackagePropertiesMarshaller.java:41)
at org.apache.poi.openxml4j.opc.OPCPackage.<init>(OPCPackage.java:140)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:103)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:298)
at org.apache.poi.ooxml.util.PackageHelper.open(PackageHelper.java:37)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:307)
at com.example.omen.serverforcofe.Fragment_service.onViewCreated(Fragment_service.java:366)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:993)
at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1153)
at android.app.BackStackRecord.run(BackStackRecord.java:806)
at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1565)
at android.app.FragmentManagerImpl$1.run(FragmentManager.java:487)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5845)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:768)
Suppressed: java.lang.ClassNotFoundException: javax.xml.stream.XMLEventFactory
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 20 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
Попробуйте для xlsx применить HSSFWorkbook
Workbook wb;
if (file.endWith(.xlsx))wb=new HSSFWorkbook();
else if (file.endWith(.xls))wb=new XSSFWorkbook();
В итоге все оказалось хоть и запутано, но не так сложно. Как я понял проблема связана с тем, что Apache POI полностью совместим с android только в версии 3.17, когда другие версии работаю частично. Вот мое решение: Сначала в gradle(allproject) добавляем:
buildscript {
...
ext {
poiVersion = '3.17'
}
...
}
allprojects {
repositories {
jcenter()
google()
maven { url 'https://jitpack.io' }
}
}
После надо добавить в dependencies из файла build.gradle:
implementation "com.github.SUPERCILEX.poi-android:poi:$poiVersion"
Вот на всякий случай мой полный Build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
//useLibrary 'org.apache.http.legacy'
defaultConfig {
multiDexEnabled true // this line will solve this problem
applicationId "com.example.jone1.navigation_drawer"
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
configurations.all {
resolutionStrategy {
force 'com.android.support:support-v4:27.1.0'
}
}
buildTypes {
release {
multiDexKeepFile file('multidex-config.txt')
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation "com.github.SUPERCILEX.poi-android:poi:$poiVersion"
...
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Похожие вопросы, но ответов на них так и не последовало, возможно сейчас сюда забредет гуру спринга и разложит все по полочкам: тыц и тыц
Несколько дней назад сайт перевели на https, и сайт перестал парситьсяДругие https сайты парсятся без проблем
Суть проблемы: пишу тесты для дао слоя и не при запуске вылазит ошибка failed to load applicationcontextПомогите, кто знает в чем проблема
Раньше по двойному клику открывалось gui приложение на OpenJDK Java 8 Policy ToolНе знаю что случилось, но стало запускаться только из консоли