2016-11-20 11 views
1

я использую apache.poi 3,15 читать XLSX файла из андроида. мое приложение показать ошибки в 2-х условиях условие один: если я бегу мое приложение без XML-beans.jar, приложение будет построить и запустить, и я могу declearандроид для чтения XLSX файл с апачом пои остановкой с ошибкой, как решить

XSSFWorkbook workbook = null; 

поэтому не ошибка будет быть, но если появляться я изменить мой код для этого

InputStream fIn = cntx.getResources().getAssets().open("a.xlsx", cntx.MODE_WORLD_READABLE); 
XSSFWorkbook workbook = null; 
workbook=new XSSFWorkbook(fIn); 

приложения будет успешно строить, после запуска остановится и показать эту ошибку:

java.lang.VerifyError: org/apache/poi/xssf/usermodel/XSSFWorkbook 

Состояние два: если я завишу xmlbeans.jar, андроид студия прекращает процесс сборки и показать эту ошибку:

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'. > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/apache/xmlbeans/xml/stream/Location.class 

это мой Gradle:

defaultConfig { 
    applicationId "com.ramin.test" 
    minSdkVersion 17 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
    //enable Multi Dex 
    multiDexEnabled true 

} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 

dexOptions { 
    preDexLibraries false; 
    javaMaxHeapSize "4g" 
} 
afterEvaluate { 
    tasks.matching { 
     it.name.startsWith('dex') 
    }.each { dx -> 
     if (dx.additionalParameters == null) { 
      dx.additionalParameters = ['--multi-dex'] 
     } else { 
      dx.additionalParameters += '--multi-dex' 
     } 
    } 
} 

dependencies { 
testCompile 'junit:junit:4.12' 
compile 'com.android.support:cardview-v7:23.4.0' 
compile 'com.android.support:recyclerview-v7:23.4.0' 
compile 'com.android.support:appcompat-v7:23.4.0' 
compile 'com.android.support:design:23.1.1' 
compile files('libs/poi-3.15.jar') 
compile files('libs/poi-ooxml-schemas-3.15.jar') 
compile files('libs/poi-ooxml-3.15.jar') 
compile files('libs/xmlbeans-2.6.0.jar')} 

, что я должен делать

+1

ли вы посмотрите на любой другой Android + POI вопросы здесь ? Что произойдет, если вы будете следовать рекомендациям, данным в большинстве из них? – Gagravarr

+0

да, я видел большинство вопросов в stackoverflow, у любой версии была другая ошибка – ramin

+0

я попробовал библиотеку aspose.cell, и это хорошо работает, к сожалению, не имеет права использовать только 30-дневную пробную версию :(так что снова я должен решить проблему apache.poi. для следующего шага я изменяю версию apache с 3,15 до 3,8. Теперь у меня есть одна проблема с stax-api1.01.jar для этой ошибки («javax/xml/stream/EventFilter.class»: Неисправное или ошибочное использование основной класс (java. * или javax. *), когда не строит основную библиотеку.) – ramin

ответ

0

, наконец Я нашел решение ее e https://github.com/andruhon/AndroidReadXLSX . просто нужно добавить эти файлы jar не больше! :

compile files('libs/aa-poi-3.10-min-0.1.5.jar') 
compile files('libs/aa-poi-ooxml-schemas-3.10-reduced-more-0.1.5.jar') 

и другие линии в Gradle, что нам нужно построить:

defaultConfig { 
    multiDexEnabled true 

} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
} 
dexOptions { 
    preDexLibraries false; 
    javaMaxHeapSize "4g" 
} 

afterEvaluate { 
    tasks.matching { 
     it.name.startsWith('dex') 
    }.each { dx -> 
     if (dx.additionalParameters == null) { 
      dx.additionalParameters = ['--multi-dex'] 
     } else { 
      dx.additionalParameters += '--multi-dex' 
     } 
    } 
} 

Может быть, это поможет кто-то ...