Я получаю исключение из заголовка при запуске приложения. Он имеет файл .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 ().
setText()
функции.Ответы:
(Только предположение, меньше информации о трассировке стека исключений)
Я думаю, эта строка,
incercari.setText(valIncercari);
исключает, потому чтоvalIncercari
естьint
Так и должно быть,
Или
источник
Integer.toString(valIncercari);
setText(int)
также используется для получения строкового ресурса по id. А в Android все ID ресурса имеетint
значение.Я просто хотел указать на другую причину, по которой эта ошибка может быть вызвана тем, что вы определили строковый ресурс для одного перевода вашего приложения, но не предоставили строковый ресурс по умолчанию.
Пример выпуска:
Как вы можете видеть ниже, у меня был строковый ресурс для испанской строки "get_started". На него все еще можно ссылаться в коде, но если телефон не на испанском, у него не будет ресурсов для загрузки и сбоя при вызове
getString()
.Значения-е / strings.xml
Ссылка на ресурс
Logcat:
Решение проблемы
Предотвратить это довольно просто, просто убедитесь, что у вас всегда есть строковый ресурс по умолчанию,
values/strings.xml
так что если телефон на другом языке, у него всегда будет ресурс, к которому можно обратиться.Значения / strings.xml
Значения-о / strings.xml
Значения-е / strings.xml
Значения-де / strings.xml
источник
Другой сценарий, который может вызвать это исключение, связан с DataBinding, то есть когда вы используете что-то подобное в макете
Обратите внимание, что переменная, которую я использую, является целым числом, и я назначаю его текстовому полю TextView. Поскольку TextView уже имеет метод с сигнатурой,
setText(int)
он будет использовать этот метод вместо использованияsetText(String)
и приведения значения. Таким образом, TextView воспринимает ваш входной номер как значение ресурса, которое, очевидно, недопустимо.Решение состоит в том, чтобы привести ваше значение int к строке, как это
источник
Build
->Clean Project
в Android Studio, чтобы заново сгенерировать классы привязки данных.Эта проблема в основном возникает из-за ошибки в
setText()
методеРешение простое - укажите ваше
Integer
значение, преобразовав его вstring
типисточник
Иногда это происходило из-за того, что я не нашел источник, например, если я хочу установить текст в текстовое представление из адаптера, тогда я должен использовать
Если вы напишите что-то вроде
это не будет работать, и иногда мы не находим ресурс из файла string.xml, тогда возникает этот тип ошибки.
источник
Исключением является использование DataBinding и установка фона для текста редактирования с ресурсами из папки drawable.
Решение
Я просто изменяю фон с
android:background="@drawable/rectangle"
наandroid:background="@null"
Очистить и восстановить проект.
источник
Вы присваиваете числовое значение текстовому полю. Вы должны преобразовать числовое значение в строку с:
источник