2014-02-20 85 views
6

我目前從eclipse切換到android studio。在eclipse中,我有2個項目,一個android應用程序項目和一個java項目,我把它們包含在android項目中作爲庫。這個java項目使用ResourceBundles爲它自己的錯誤創建國際化的錯誤消息。這一直是我的項目結構:Android Studio - 在模塊中包含ResourceBundles

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

此加載RessourceBundles如下當工作:

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

現在我切換到Android的工作室和我的新項目結構看起來像這樣(添加Java庫作爲模塊):

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

但我不能再裝入把ResourceBundle,它只是拋出一個java.util.MissingResourceException。我爲ResourceBundles和不同的路徑嘗試了很多不同的位置,但我會變得瘋狂,因爲沒有任何工作似乎。任何人都可以解釋放置這些包的位置以及如何加載它們?

謝謝!

+0

MyLibrary正在使用build.gradle中的java插件? –

+0

是的,它使用'apply plugin:'java'' – Horrorente

+0

src/main/java是Android-Gradle目錄約定; Java插件可能不知道在那裏尋找資源。 –

回答

0

我從來沒有嘗試過,但Intellij帶有非常好的資源包集成。

參考該鏈接

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

從上方連結

資源包是一組具有相同的基本名稱 具有不同特定語言的後綴屬性文件。資源束包含至少兩個具有相似基本名稱的屬性文件,例如 file_en.properties和file_de.properties。

IntelliJ IDEA可以識別屬性文件,並且如果兩個或多個 名稱僅在後綴中有區別的文件遇到 ,則會將它們加入到資源包中。新的節點資源 包「(基本名稱)」出現在項目工具窗口:

resource Bundles

你可以有你的模塊內或根,以及這些文件。

+0

嘿,謝謝你的信息。 Android Studio正在識別這些文件,但我無法使用Java加載它們。 Android只是無法找到他們,無論我嘗試。 – Horrorente

0

首先請確保您的資源文件夾(屬性文件所在的位置)位於類路徑中,並且您可以通過調用以下內容輕鬆找到該文件夾​​。

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

現在,如果你發現你的資源文件夾中的類路徑中,那麼你可以簡單地調用包基本名稱,你的情況ResourceBundle.getBundle(「捆綁」),不需要一個完全合格的路徑。假設你使用的是英文區域設置,它應該找到它。如果需要,您可以進一步添加en_US,en_NZ,en_GB等。

如果你沒有找到你的屬性文件夾,那麼確保它在類路徑中,並且如果你需要動態添加它,請按照這個線程。

How do you change the CLASSPATH within Java?

記住加載屬性文件之外唯一動態是,你必須調用findResource或findResources API的類加載器加載的屬性文件。希望這可以幫助。

9

面對完全相同的問題。爲了使它工作,我終於必須在我的項目模塊的主文件夾中創建一個resorces文件夾。

Android resources folder

這裏使用相同的名稱開始(如本彩信)的多個文件被捆綁爲一個資源包。

最後只好使用 ResourceBundle.getBundle( 「org.eclipse.paho.client.mqttv3.internal.nls.logcat」) 或 ResourceBundle.getBundle(「org.eclipse.paho.client.mqttv3叫它.internal.nls.messages「) 以獲取所需的資源。

+0

作品!我發現這個提示很有用:「這個資源文件夾可以通過上下文菜單(新建>文件夾> Java資源文件夾)創建。」 http://stackoverflow.com/questions/29635462/android-studio-resourcebundle-missingresourceexception – winne2

+0

它適合我!謝謝 – Duyhungws

+0

這個工作,但實際上沒有必要創建一個新的資源文件夾,但現有的文件夾可以作爲資源文件夾包含在'build.gradle'中,請參閱我的[answer](https://stackoverflow.com/a/45985134/905686)。 – user905686

0

如果將第二個項目作爲庫包含在內,則可能不希望按照previous answer(可行)中的建議創建新的資源文件夾。相反,你可以簡單地添加圖書館的資源文件夾到你的資源目錄在你的模塊build.gradle:到android部分添加

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

如果現在加入res文件夾包含org/mypackage/Bundle.properties您可以使用引用它

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

實際上,添加一個新的資源文件夾只會將其作爲資源目錄添加到build.gradle中。