2014-02-20 10 views
6

Ich bin derzeit von Eclipse zu Android Studio gewechselt. In Eclipse hatte ich 2 Projekte, ein Android-Anwendungsprojekt und ein Java-Projekt, das ich als Android-Bibliothek in das Android-Projekt einfügte. Dieses Java-Projekt verwendet ResourceBundles, um internationalisierte Fehlermeldungen für eigene Fehler zu erstellen. Das hat mein Projektstruktur gewesen:Android Studio - Include ResourceBundles in Modul

/MyApp 
    /src 
    /res 
    ... 
/MyLibrary 
    /src 
    /res (added as source folder to build path) 
     /loc 
     Bundle_en.properties 

Das funktionierte, wenn die RessourceBundles wie folgt geladen:

ResourceBundle.getBundle("loc.Bundle", Locale.ENGLISH); 

Jetzt wechselte ich zu Android-Studio und meine neue Projektstruktur sieht wie folgt aus (hinzugefügt, um die Java-Bibliothek als Modul):

/MyProject 
    /MyApp 
     ... 
    /MyLibrary 
     /src 
     /main 
      /java 
       ... 
      /res 
       /loc 
        Bundle_en.properties 

Aber ich bin die Resource nicht in der Lage mehr zu laden, es ist nur ein java.util.MissingResourceException werfen. Ich habe viele verschiedene Orte für die ResourceBundles und verschiedene Pfade ausprobiert, aber ich werde verrückt, weil nichts zu funktionieren scheint. Könnte irgendjemand erklären, wo man diese Bündel ablegt und wie man sie lädt?

Vielen Dank!

+0

MyLibrary verwendet das Java-Plugin in build.gradle? –

+0

Ja, es verwendet 'apply plugin: 'java'' – Horrorente

+0

src/main/java ist eine Android-Gradle-Verzeichniskonvention; Das Java-Plugin kann möglicherweise nicht nach Ressourcen suchen. –

Antwort

0

Ich habe es nie versucht, aber Intellij kommt mit einer sehr guten Integration von Ressourcen-Bundles.

Link Siehe

http://www.jetbrains.com/idea/webhelp/resource-bundle.html

aus den obigen Link

Ressourcenbündel ist ein Satz von Eigenschaften Dateien, die denselben Basisnamen mit verschiedenen sprachspezifischen Endungen haben. Ein Ressourcenpaket enthält mindestens zwei Eigenschaftendateien mit einem ähnlichen Basisnamen, z. B. file_en.properties und file_de.properties.

IntelliJ IDEA erkennt Eigenschaftendateien, und wenn zwei oder mehr Eigenschaftendateien mit den Namen, die sich nur im Suffix unterscheiden, gefunden werden, verbindet sie sie zu einem Ressourcenbündel. Der neue Knoten Ressourcen Bundle ‚(Basisname)‘ erscheint im Projekt-Tool-Fenster:

resource Bundles

Sie diese Dateien auch in Ihrem Modul oder auf root haben.

+0

Hey, danke für die Information. Android Studio erkennt diese Dateien, aber ich kann sie nicht in Java laden. Android findet sie einfach nicht, egal was ich versuche. – Horrorente

0

Zuerst stellen Sie bitte sicher, dass Ihr Ressourcenordner (wo die Eigenschaftendatei lokalisiert ist) im Klassenpfad ist, und Sie können dies leicht finden, indem Sie Folgendes aufrufen.

URLClassLoader ldr = (URLClassLoader)ClassLoader.getSystemClassLoader(); 
URL[] urls = ldr.getURLs(); 
for(URL url : urls) 
    { 
     System.out.println(url.getPath()); 
    } 

Nun, wenn Sie Ihre Ressourcen-Ordner in dem Classpath finden, dann können Sie einfach den Namen Bündel Basis nennen, in Ihrem Fall ResourceBundle.getBundle („Bundle“), keine Notwendigkeit für einen vollständigen Pfad. Wenn Sie das englische Gebietsschema verwenden, sollte es es finden. Sie können en_US, en_NZ, en_GB usw. bei Bedarf hinzufügen.

Wenn Sie Ihren Property-Ordner nicht finden, stellen Sie sicher, dass er im Klassenpfad ist und wenn Sie ihn dynamisch hinzufügen müssen, folgen Sie diesem Thread.

How do you change the CLASSPATH within Java?

die einzige Ergänzung zum Laden von Eigenschaftsdateien bleiben dynamisch ist, dass Sie oder Findresource findResources API auf den Class-Loader die Property-Datei zu laden, muss anrufen. Hoffe das hilft.

9

Konfrontiert genau das gleiche Problem. Damit es funktioniert, musste ich einen Resorces-Ordner im Hauptordner meines Projektmoduls erstellen.

Android resources folder

hier mehrere Dateien mit dem gleichen Namen werden (wie Nachrichten in diesem Bild) als Ressourcenbündel gebündelt starten.

hatte schließlich nennen ResourceBundle.getBundle ("org.eclipse.paho.client.mqttv3.internal.nls.logcat") oder ResourceBundle.getBundle mit ("org.eclipse.paho.client.mqttv3 .internal.nls.messages ") um die benötigte Ressource zu bekommen.

+0

Funktioniert! Ich fand diesen Hinweis hilfreich: "Dieser Ressourcenordner kann über das Kontextmenü (Neu> Ordner> Java Resources Folder) erstellt werden." http://stackoverflow.com/questions/29635462/android-studio-resourcebundle-missingresourceexception – winne2

+0

Es funktioniert für mich! Danke – Duyhungws

+0

Dies funktioniert, aber es ist eigentlich nicht notwendig, einen neuen Ressourcenordner zu erstellen, aber der vorhandene Ordner kann als Ressourcenordner in 'build.gradle' enthalten sein, siehe meine [Antwort] (https://stackoverflow.com/a/45985134/905686). – user905686

0

Wenn Sie das zweite Projekt als Bibliothek hinzufügen, möchten Sie möglicherweise keinen neuen Ressourcenordner erstellen, wie in einer previous answer vorgeschlagen (die funktioniert). Stattdessen können Sie einfach die build.gradle Ressourcenordner auf Ihre Ressourcen-Verzeichnisse in Ihrem Modul der Bibliothek hinzufügen: Zum android Abschnitt

sourceSets { 
    main.resources.srcDirs += 'path/to/your/libs/res' 
} 

hinzufügen Wenn nun die hinzugefügt res Ordner enthält org/mypackage/Bundle.properties Sie darauf verweisen können mit

ResourceBundle.getBundle("org.mypackage.Bundle") 

Tatsächlich fügt das Hinzufügen eines neuen Ressourcenordners nichts mehr hinzu, als es als Ressourcenverzeichnis in build.gradle hinzuzufügen.

Verwandte Themen