2011-03-06 184 views
16

我是新來的Android(但不是Java),我遵循示例exercice NotepadV1,但我得到一個奇怪的錯誤,而在虛擬設備上執行(Hello World工作罰款在這個相同的VD):「資源未找到」異常,當試圖加載資源在NotepadV1示例exercice

運行該程序時,我得到一個「資源未找到」異常。使用的ID是正確的(Eclipse將它顯示爲一個自動完成提議,並在R.java中定義)。 如果我直接使用字符串而不是資源ID,所有的事情都很好。

這裏是我的string.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string 
     name="app_name">Notepad v1</string> 
    <string 
     name="no_notes">No Notes Yet</string> 
    <string 
     name="menu_insert">Add Item</string> 
</resources> 

這裏是在拋出異常的函數:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    boolean result = super.onCreateOptionsMenu(menu); 
    // menu.add(0, INSERT_ID, 0, R.string.menu_insert); // exception ! 
    menu.add(0, INSERT_ID, 0, "Add Item"); // ok like this 
    return result; 
} 

註釋掉線是拋出異常的一個。正如你所看到的,當直接給予字符串而不是資源ID時,它會通過。 我試着在同一個程序的其他地方加載這個資源,並且引發異常。其他資源在程序的其他地方使用,沒有問題。

有人有想法嗎?我錯過了什麼嗎?

非常感謝您的想法

+13

隨機提示:您是否嘗試過清理項目(Eclipse中的項目 - >清理...) – 2011-03-06 19:32:29

+0

您會得到什麼錯誤? – 2011-03-06 19:35:19

+1

只需檢查一下:是/ res/values /目錄中的string.xml文件? – 2011-03-06 19:41:22

回答

33

我也有同樣的問題和清潔項目在Eclipse中解決它。

+1

同樣在這裏雖然每次我添加一個資源(佈局,字符串等)都不會發生,但是有時候它確實發生了,清理這個項目總是有幫助的。生成的java文件是正確的嗎?也許APK的包裝是越野車嗎? – miha 2011-07-13 09:54:50

1

很奇怪,但我能得到這個通過引用字符串作爲getResources().getString(R.string.menu_insert)

,並通過在R.java文件重新排序的字符串常量工作。 no_notes的值高於menu_insert,但列在menu_insert之前。所以我列出了他們在數字常量的順序,和它的工作:

public static final class string { 
    public static final int app_name=0x7f040000; 
    public static final int menu_insert=0x7f040001; 
    public static final int no_notes=0x7f040002; 
} 

通過getResources().getString()訪問字符串通常足以,所以這一定是在Eclipse或SDK一些bug。

+0

我的理解是,你永遠不應該修改'R.java'文件嗎? – Gaffi 2013-01-16 12:20:29

+0

「永遠不要說永遠不要。」你不應該把它作爲一個普通的活動,不包括 – adamcodes 2013-01-17 01:43:01

+0

後續問題:如何防止系統在清理/重建後撤銷更改(假設問題仍然存在),因爲eclipse已經過時了,所以很少出現這種情況。 (我一直在使用)總是重新生成這個文件? – Gaffi 2013-01-17 13:37:33

0

將它手動添加到strings.xml而不是使用「Resources」選項卡幫助了我。

0

嘗試從gen Eclipse文件夾中刪除R文件。它將會重新生成,希望問題得到解決。

0

我想:

資源:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="exEditTextEmpty">Program could not get access to EditText view</string> 
</resources> 

代碼:

Exception ex = new Exception(getResources().getString(R.string.exEditTextEmpy)); 
0

我有一個類似的問題,當我改名(與重構)的項目。清潔沒有幫助,但Eclipse重新啓動有幫助。