2016-08-11 1 views
0

J'utilise Lucene pour le mot de mots. J'ai testé sur une application Java (dans le principal) et cela a fonctionné parfaitement. Cependant, dans mon application Android (dans onCreate), cela ne fonctionne pas. Quelqu'un sait-il pourquoi? Voici mon code onCreate, dans la principale et l'erreur quand il est tourné dans onCreate:erreur PorterStemmer dans l'application android

import org.tartarus.snowball.ext.PorterStemmer; 
import com.veryinteligent.jarvas.R; 
import android.app.Activity; 
import android.os.Bundle; 

public class LuceneStemmer extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.wordcommands); 
     String term = "obviously"; 
     PorterStemmer stemmer = new PorterStemmer(); 
     stemmer.setCurrent(term); 
     stemmer.stem(); 
     System.out.println(stemmer.getCurrent()); 
    } 
} 

import org.apache.lucene.analysis.en.EnglishAnalyzer; 
import org.apache.lucene.queryparser.classic.ParseException; 
import org.apache.lucene.queryparser.classic.QueryParser; 
import org.tartarus.snowball.ext.PorterStemmer; 
import org.tartarus.snowball.ext.PortugueseStemmer; 
import com.rmtheis.yandtran.language.Language; 
import com.rmtheis.yandtran.translate.Translate; 

public class TranslationTester { 

    public static void main(String[] args) { 
     String term = "Obviously"; 

     PorterStemmer stemmer = new PorterStemmer(); 
     stemmer.setCurrent(term); 
     stemmer.stem(); 
     System.out.println(stemmer.getCurrent()); 
    } 
} 

Voici la trace de la pile rencontrée lors de l'exécution.

08-11 19:32:55.455: E/dalvikvm(1148): Could not find class 'org.tartarus.snowball.ext.PorterStemmer', referenced from method com.veryinteligent.jarvas.activity.LuceneStemmer.onCreate 
08-11 19:32:55.455: W/dalvikvm(1148): VFY: unable to resolve new-instance 2031 (Lorg/tartarus/snowball/ext/PorterStemmer;) in Lcom/veryinteligent/jarvas/activity/LuceneStemmer; 
08-11 19:32:55.455: D/dalvikvm(1148): VFY: replacing opcode 0x22 at 0x000b 
08-11 19:32:55.455: D/dalvikvm(1148): VFY: dead code 0x000d-001f in Lcom/veryinteligent/jarvas/activity/LuceneStemmer;.onCreate (Landroid/os/Bundle;)V 
08-11 19:32:55.506: D/AndroidRuntime(1148): Shutting down VM 
08-11 19:32:55.506: W/dalvikvm(1148): threadid=1: thread exiting with uncaught exception (group=0xb6ff14f0) 
08-11 19:32:55.506: E/AndroidRuntime(1148): FATAL EXCEPTION: main 
08-11 19:32:55.506: E/AndroidRuntime(1148): java.lang.NoClassDefFoundError: org.tartarus.snowball.ext.PorterStemmer 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at com.veryinteligent.jarvas.activity.LuceneStemmer.onCreate(LuceneStemmer.java:18) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.os.Handler.dispatchMessage(Handler.java:99) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.os.Looper.loop(Looper.java:130) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at java.lang.reflect.Method.invokeNative(Native Method) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at java.lang.reflect.Method.invoke(Method.java:507) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
08-11 19:32:55.506: E/AndroidRuntime(1148):  at dalvik.system.NativeStart.main(Native Method) 

[Mise à jour] J'ai découvert que je devais importer mes fichiers en plaçant le dossier libs. Le problème est que j'ai une erreur "la conversion au format dalvik a échoué avec l'erreur 1". Voici le message de ma console:

[2016-08-13 01:43:12 - JARVAS] Dx 
UNEXPECTED TOP-LEVEL EXCEPTION: 
java.lang.RuntimeException: Exception parsing classes 
    at com.android.dx.command.dexer.Main.processClass(Main.java:752) 
    at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718) 
    at com.android.dx.command.dexer.Main.access$1200(Main.java:85) 
    at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645) 
    at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284) 
    at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166) 
    at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144) 
    at com.android.dx.command.dexer.Main.processOne(Main.java:672) 
    at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574) 
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311) 
    at com.android.dx.command.dexer.Main.run(Main.java:277) 
    at sun.reflect.GeneratedMethodAccessor57.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:188) 
    at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:786) 
    at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:597) 
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:733) 
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206) 
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:328) 
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:403) 
    at org.eclipse.core.internal.resources.Project$1.run(Project.java:618) 
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2345) 
    at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597) 
    at org.eclipse.core.internal.resources.Project.build(Project.java:124) 
    at com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:1143) 
    at com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:155) 
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:858) 
    at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:707) 
    at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1018) 
    at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1222) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) 
Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000) 
    at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472) 
    at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406) 
    at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388) 
    at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251) 
    at com.android.dx.command.dexer.Main.parseClass(Main.java:764) 
    at com.android.dx.command.dexer.Main.access$1500(Main.java:85) 
    at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684) 
    at com.android.dx.command.dexer.Main.processClass(Main.java:749) 
    ... 32 more 
[2016-08-13 01:43:12 - JARVAS] Dx 1 error; aborting 
[2016-08-13 01:43:12 - JARVAS] Conversion to Dalvik format failed with error 1 

J'ai essayé toutes les anciennes méthodes, est-ce que quelqu'un en connaît de nouvelles?

Répondre

2

Le problème est assez clair, comme dans la trace de la pile, nous trouvons:

java.lang.NoClassDefFoundError: org.tartarus.snowball.ext.PorterStemmer. 

Vérifiez votre chemin de classe à l'exécution: ce qui signifie que vous apportez org.tartarus.snowball.ext.* et classes associées à votre environnement d'exécution Android. Par conséquent, vérifiez les dépendances manquantes (fichiers .jar). Pour la version Lucene> 4.0 à 5.2.1, vous devez inclure le fichier lucene-analyzers-common.jar.