Ответ 1
У меня была такая же проблема, и очистка проекта в Eclipse решила его.
Я новичок в Android (но не на Java), я следую примеру программы NotepadV1, но при запуске на виртуальном устройстве я получаю странную ошибку (Hello World отлично справился с этим же vd):
При запуске программы я получаю исключение "Ресурс не найден". Использованный идентификатор верен (Eclipse покажет его мне как предложение автозавершения, и он хорошо определен в R.java). Если я использую непосредственно строку вместо идентификатора ресурса, все будет хорошо.
Вот мой 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;
}
Записанная строка - это строка, которая выдает исключение. Как вы видите, при прямой передаче строки вместо идентификатора ресурса она проходит. Я попытался загрузить этот ресурс в другом месте в той же программе, и исключение выбрасывается повсеместно. Другие ресурсы используются в других местах программы без проблем.
У кого-нибудь есть идея? Я что-то пропустил?
Большое спасибо за ваши идеи.
У меня была такая же проблема, и очистка проекта в Eclipse решила его.
Очень странно, но я смог заставить это работать, ссылаясь на строку как 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.
Добавление его вручную в файл strings.xml вместо использования вкладки "Ресурсы" помогло мне.
Попробуйте удалить файл R
из папки gen
Eclipse. Затем он будет восстановлен, и проблема будет решена.
Я думаю:
Ресурс:
<?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));
У меня была аналогичная проблема, когда я переименовал (с рефактором) проект. Чистый не помог, но перезапуск Eclipse поможет.