Android: android.content.res.Resources $NotFoundException: Идентификатор ресурса строки # 0x5

Я получаю исключение из названия при запуске моего приложения. То, что он делает, это файл .txt со словами для игры Hangman, и я думаю, что это исключение возникает при доступе к файлу. Мой файл cuvinte.txt находится в /assets/. Вот мой код (я пропустил часть layout/xml, которая отлично работает):

public void onCreate() {
    // all the onCreate() stuff, then this:
    try {
        AssetManager am = this.getAssets();
        InputStream is = am.open("cuvinte.txt");
        InputStreamReader inputStreamReader = new InputStreamReader(is);
        BufferedReader b = new BufferedReader(inputStreamReader);
        String rand;
        while((rand=b.readLine())!=null){
            cuvinte.add(rand);
        }
    } catch (IOException e) {
        Toast.makeText(this, "No words file", Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }

    newGame(newG);
}

public void newGame(View view){
    Random rand = new Random();
    String stringCuvant = cuvinte.get(rand.nextInt(cuvinte.size()));
    cuvant.setText("");
    System.out.println(stringCuvant);
    for(int i = 0; i< stringCuvant.length(); i++){
        cuvant.append("_ ");
    }
    incercari.setText(valIncercari);
}

Функция newGame() вызывается как при нажатии новой кнопки игры, так и в начале действия в функции onCreate().

Ответ 1

(Только предположение, меньше информации об исключении stacktrace)

Я думаю, эта строка, incercari.setText(valIncercari); throws Exception потому что valIncercari int

Так должно быть,

incercari.setText(valIncercari+"");

или

incercari.setText(Integer.toString(valIncercari));

Ответ 2

Просто хотелось указать на другую причину, по которой эта ошибка может быть вызвана, если вы определили строковый ресурс для одного перевода вашего приложения, но не предоставили стандартный ресурс по умолчанию.

Пример проблемы:

Как вы можете видеть ниже, у меня был строковый ресурс для испанской строки "get_started". Его можно по-прежнему ссылаться на код, но если телефон не на испанском языке, у него не будет ресурса для загрузки и сбоя при вызове getString().

<сильные > значения-е/strings.xml

<string name="get_started">SIGUIENTE</string>

Ссылка на ресурс

textView.setText(getString(R.string.get_started)

Logcat:

06-11 11:46:37.835    7007-7007/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.app.test PID: 7007
android.content.res.Resources$NotFoundException: String resource ID #0x7f0700fd
        at android.content.res.Resources.getText(Resources.java:299)
        at android.content.res.Resources.getString(Resources.java:385)
        at com.juvomobileinc.tigousa.ui.signin.SignInFragment$4.onClick(SignInFragment.java:188)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Решение проблемы

Предотвращение этого довольно просто, просто убедитесь, что у вас всегда есть строковый ресурс по умолчанию в values/strings.xml, так что если телефон находится на другом языке, у него всегда будет ресурс, на который нужно вернуться.

<сильные > значения /strings.xml

<string name="get_started">Get Started</string>

<сильные > значения-ен/strings.xml

<string name="get_started">Get Started</string>

<сильные > значения-е/strings.xml

<string name="get_started">SIGUIENTE</string>

значения-де/strings.xml

<string name="get_started">Ioslegen</string>

Ответ 3

Другой сценарий, который может вызвать это исключение, - это DataBinding, то есть когда вы используете что-то подобное в своем макете

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>

        <variable
            name="model"
            type="point.to.your.model"/>
    </data>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@{model.someIntegerVariable}"/>

</layout>

Обратите внимание, что переменная, которую я использую, является Integer, и я назначаю ее текстовому полю TextView. Поскольку TextView уже имеет метод с сигнатурой setText(int), он будет использовать этот метод вместо использования setText(String) и отличает это значение. Таким образом TextView думает о вашем номере ввода в качестве значения ресурса, который, очевидно, недействителен.

Решение состоит в том, чтобы вывести значение int в строку следующим образом

android:text="@{String.valueOf(model.someIntegerVariable)}"

Ответ 4

Эта проблема в основном возникает из-за ошибки в методе setText()

Решение простое - укажите значение Integer, преобразовав его в тип string. как

textview.setText(Integer.toString(integer_value));

Ответ 5

Иногда это происходило из-за того, что я не нашел источник, например, если я хочу установить текст в текстовое представление из адаптера, тогда я должен использовать

 textView.setText(""+name);

Если вы напишите что-то вроде

 textView.setText(name);

это не сработает, и иногда мы не находим ресурс из файла string.xml, тогда возникает ошибка такого типа.

Ответ 6

Иногда вам нужно также вставлять в значения/strings.xml

Ответ 7

Использование DataBinding и установка фона для текста редактирования с ресурсами из папки drawable приводит к исключению.

<EditText
                            android:background="@drawable/rectangle"
                            android:imeOptions="flagNoExtractUi"
                            android:layout_width="match_parent"
                            android:layout_height="45dp"
                            android:hint="Enter Your Name"
                            android:gravity="center"
                            android:textColorHint="@color/hintColor"
                            android:singleLine="true"
                            android:id="@+id/etName"
                            android:inputType="textCapWords"
                            android:text="@={viewModel.model.name}"
                            android:fontFamily="@font/avenir_roman"/>

Решение

Я просто изменяю фон с android:background="@drawable/rectangle" на android:background="@null"

Очистить и восстановить проект.