2016-04-29 7 views
0

Ich weiß, dass diese Frage von vielen zuvor gefragt wurde, aber ich habe versucht, die Lösung in den meisten Posts, aber immer noch vor dem Problem.Android POI Plugin sagt Duplikate Dateien in APK-META-INF

Ich möchte Excel (xlsx) Datei in Android App lesen. Ich habe Dateien POI jar heruntergeladen und hinzugefügt, um es zu lib Ordner und fügte hinzu, es auch als Abhängigkeit [1.poi-3.7.jar 2.poi-OOXML-3.7.jar]

Zuerst habe ich diesen Fehler habe: -

Duplicate files copied in APK META-INF/notice.txt

ich diesen Link gefunden Click here to view

Und durch diesen Code in Abhängigkeit Hinzufügen es dieses Problem gelöst

packagingOptions { 
    exclude 'META-INF/DEPENDENCIES' 
    exclude 'META-INF/LICENSE' 
    exclude 'META-INF/LICENSE.txt' 
    exclude 'META-INF/license.txt' 
    exclude 'META-INF/NOTICE' 
    exclude 'META-INF/NOTICE.txt' 
    exclude 'META-INF/notice.txt' 
    exclude 'META-INF/RELEASE_NOTES.txt'; 
    exclude 'META-INF/ASL2.0' 
} 

Aber dann Fehler zur Laufzeit ist immer

FATAL EXCEPTION: main 
    Process: com.pixelmagnus.systemteq, PID: 12872 
    java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/xmlbeans/XmlOptions; 
    at org.apache.poi.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:44) 
    at com.pixelmagnus.systemteq.MainActivity.loadConfiguration(MainActivity.java:68) 
    at com.pixelmagnus.systemteq.MainActivity.requestMultiplePermissions(MainActivity.java:55) 
    at com.pixelmagnus.systemteq.MainActivity.onCreate(MainActivity.java:35) 
    at android.app.Activity.performCreate(Activity.java:6285) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524) 
    at android.app.ActivityThread.access$900(ActivityThread.java:154) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:224) 
    at android.app.ActivityThread.main(ActivityThread.java:5526) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.xmlbeans.XmlOptions" on path: DexPathList[[zip file "/data/app/com.pixelmagnus.systemteq-2/base.apk"],nativeLibraryDirectories=[/data/app/com.pixelmagnus.systemteq-2/lib/arm, /vendor/lib, /system/lib]] 
    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.POIXMLDocumentPart.<clinit>(POIXMLDocumentPart.java:44)  
    at com.pixelmagnus.systemteq.MainActivity.loadConfiguration(MainActivity.java:68)  
    at com.pixelmagnus.systemteq.MainActivity.requestMultiplePermissions(MainActivity.java:55)  
    at com.pixelmagnus.systemteq.MainActivity.onCreate(MainActivity.java:35)  
    at android.app.Activity.performCreate(Activity.java:6285)  
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)  
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)  
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2524)  
    at android.app.ActivityThread.access$900(ActivityThread.java:154)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1391)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:224)  
    at android.app.ActivityThread.main(ActivityThread.java:5526)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
    Suppressed: java.lang.ClassNotFoundException: org.apache.xmlbeans.XmlOptions 
    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) 
    ... 17 more 
    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 

XSSFWorkbook - Diese Klasse über Fehler wirft.

-Code ist unten geben: -

String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/systemteqconfig"; 
     String imagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/systemteqconfig/images"; 
     File headingService = new File(path, "headingservice.xlsx"); 
     FileInputStream fis = new FileInputStream(headingService); 
     XSSFWorkbook work_book = new XSSFWorkbook(fis); 
     XSSFSheet sheet = work_book.getSheetAt(0); 
     Iterator<Row> row = sheet.rowIterator(); 
     int i = 0; 
     while(row.hasNext()){ 
      if(i!=0){ 
       XSSFRow content = (XSSFRow)row.next(); 
       HashMap<String,String> hm = new HashMap<String,String>(); 
       hm.put("name",content.getCell(0).getStringCellValue()); 
       hm.put("english",content.getCell(1).getStringCellValue()); 
       hm.put("image",imagePath+"/"+content.getCell(2).getStringCellValue()); 
       hm.put("request",content.getCell(3).getStringCellValue()); 
       hm.put("response_one",content.getCell(4).getStringCellValue()); 
       hm.put("response_two",content.getCell(5).getStringCellValue()); 
       hm.put("active_color",content.getCell(6).getStringCellValue()); 
       hm.put("dutch",content.getCell(7).getStringCellValue()); 
       hm.put("french",content.getCell(8).getStringCellValue()); 
       hm.put("spanish",content.getCell(9).getStringCellValue()); 
       hm.put("portuguese",content.getCell(10).getStringCellValue()); 
       hm.put("polish",content.getCell(11).getStringCellValue()); 
       hm.put("chinese",content.getCell(12).getStringCellValue()); 
       hm.put("japanese",content.getCell(13).getStringCellValue()); 
       hm.put("arabic",content.getCell(14).getStringCellValue()); 
       headingContent.add(hm); 
      } 
      i++; 
     } 
     headingServicesController hs = new headingServicesController(this); 
     hs.addHeadingServices(headingContent); 
     ArrayList<HashMap<String, String>> temp = hs.getHeadingService(); 
     Log.d("CHECKING",temp.toString()); 

Und nach einigen Recherchen fand ich, dass dieser Fehler ausgelöst wird, wenn eine Datei in der Kompilierung gefunden wird, aber nicht zur Laufzeit gefunden. Obwohl ich mir nicht sicher bin, kann mir irgendjemand sagen, was hier falsch läuft.

+1

Warum verwenden Sie so eine alte Version von Apache POI? Was passiert beim Upgrade? – Gagravarr

+0

ohh sorry @Gagravarr ist dies die alte Version? Ich dachte, das ist die neueste Version. Okay, aber was immer es ist, bitte gib mir einen Hinweis, warum ich diesen Fehler bekomme. und Entschuldigung für die verspätete Antwort. – RKD

+0

Wenn Sie auf der [Apache POI-Homepage] (http://poi.apache.org/) oder auf der [Download-Seite] (http://poi.apache.org/download.html) navigieren, werden Sie feststellen, dass dies die letzte ist Version ist derzeit 3.15 Beta 1. Probiere das aus und melde dich zurück, wenn du noch Probleme hast! – Gagravarr

Antwort

0

Momentan funktioniert Apache POI aufgrund verschiedener Probleme, die bei der direkten Verwendung der Bibliotheken von Apache POI auftreten, nicht auf Android. Android ist strenger in Bezug darauf, was es als Teil der JAR-Dateien erlaubt.

Es gibt zwei Projekte, die es möglich, verwenden die meisten Apache POI auf Android machen sollte: