Строка формата XXX не является допустимой строкой формата, поэтому ее нельзя передавать в String.format

У меня есть приложение для Android и эта строка в ресурсах:

<string name="create_group_select_people">Select up to %1$d people!</string>

Это вызывается из фрагмента:

Integer countMax = 5; //also tried just "int" - nothing changed
getResources().getString(R.string.create_group_select_people, countMax);

но я получил ошибку:

Format string 'create_group_select_people' is not a valid format string so it should not be passed to String.format

Я не понимаю, что случилось? Когда я запускаю приложение, он показывает мне буквально "Выберите до% 1 $ d людей!"

Ответ 1

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

  1. чистый проект
  2. проверять многоязычные файлы
  3. или просто используйте String.format, как и другие.

Ответ 2

Установите параметр, отформатированный как true в ресурсах:

<string name="some_text" formatted="true">
    Use for String.format method. Parameter one: %s1
</string>

и используйте этот способ:

String.format(context.getString(R.string.some_text,"value 1"))

или таким образом:

context.getString(R.string.some_text,"value 1"))

Примечание. Отформатированный флаг должен быть установлен как true только для строк с заполнителями

Ответ 3

Попробуйте File → Invalidate Caches/Restart..., он исправил проблему для меня.

Ответ 4

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

Например, если у вас есть файл strings.xml в папке значений, а другой файл strings.xml - в папке values-es, но вы только добавили аргументы формата в strings.xml в папке значений, то предупреждение будет вызвано, потому что отсутствия аргументов формата в строковом ресурсе strings.xml в вашей папке values-es.

Ответ 5

Попробуйте сделать "чистый проект", за которым следует закрытие и повторное открытие Android Studio.

Это фиксировало это для меня, это похоже на небольшую ошибку Android Studio/Lint.

Ответ 6

Вероятно, вам не хватает метода форматирования класса String. Если вы устанавливаете его в TextView, правильный способ:

textView.setText(String.format(getResources().getString(R.string.create_group_select_people), countMax));

Ответ 7

Вам нужен String formatter. Пожалуйста, измените код ниже

 getResources().getString(R.string.create_group_select_people, countMax);

в

String temp =  String.format(getResources().getString(R.string.create_group_select_people), countMax);

Для получения более подробной информации обратитесь к

Ответ 8

Создайте функцию, поместите в нее свой код и добавьте этот @SuppressLint("StringFormatInvalid") непосредственно перед функцией. Надеюсь, поможет.