报错1
Provider com.bea.xml.stream.EventFactory not found
解决:
引用类的静态块加上
init {
System.setProperty("org.apache.poi.javax.xml.stream.XMLInputFactory", "com.fasterxml.aalto.stax.InputFactoryImpl")
System.setProperty("org.apache.poi.javax.xml.stream.XMLOutputFactory", "com.fasterxml.aalto.stax.OutputFactoryImpl")
System.setProperty("org.apache.poi.javax.xml.stream.XMLEventFactory", "com.fasterxml.aalto.stax.EventFactoryImpl");
}
java里init关键字换成static
好了。这是参考github的标准答案https://github.com/SUPERCILEX/poi-android/issues/11
但是!!加上之后换了错
报错2
Provider com.fasterxml.aalto.stax.EventFactoryImpl not found
在github上没有任何答案,在其他网上也都没有搜到
只有日志里有一句
W/ActivityThread: ClassLoader.loadClass: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
然后才是,不信仔细看,找了一下午。只关注到了EventFactoryImpl not found,浪费了很多时间
Caused by: org.apache.poi.javax.xml.stream.FactoryConfigurationError: Provider com.fasterxml.aalto.stax.EventFactoryImpl not found
这个EventFactoryImpl not found的答案估计全网都没有,完全没搜到这个相关的,希望对你们有用,好人点个赞。
错误2的解决
可能1也适用,但是没有再去验证了,java的话也是用线程做指定上下文的类加载器
val thread = Thread {
Thread.currentThread().contextClassLoader = this::class.java.classLoader
//操作逻辑代码 这里的XSSFWorkbook就可以打开了
val workbook = XSSFWorkbook(inputStream)
}
thread.start()