Подтвердить что ты не робот

Исключение "Ресурс не найден" при попытке загрузить ресурс в программе примера NotepadV1

Я новичок в 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;
}

Записанная строка - это строка, которая выдает исключение. Как вы видите, при прямой передаче строки вместо идентификатора ресурса она проходит. Я попытался загрузить этот ресурс в другом месте в той же программе, и исключение выбрасывается повсеместно. Другие ресурсы используются в других местах программы без проблем.

У кого-нибудь есть идея? Я что-то пропустил?

Большое спасибо за ваши идеи.

4b9b3361

Ответ 1

У меня была такая же проблема, и очистка проекта в Eclipse решила его.

Ответ 2

Очень странно, но я смог заставить это работать, ссылаясь на строку как 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.

Ответ 3

Добавление его вручную в файл strings.xml вместо использования вкладки "Ресурсы" помогло мне.

Ответ 4

Попробуйте удалить файл R из папки gen Eclipse. Затем он будет восстановлен, и проблема будет решена.

Ответ 5

Я думаю:

Ресурс:

<?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));

Ответ 6

У меня была аналогичная проблема, когда я переименовал (с рефактором) проект. Чистый не помог, но перезапуск Eclipse поможет.