web-dev-qa-db-ja.com

フォーマット文字列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人まで選択してください!」と表示されます。

22
Wackaloon

コードをコピーしただけで、うまく機能します。あなたは他の場所をチェックする必要があるかもしれません、ここに私の提案があります。

  1. クリーンプロジェクト
  2. 多言語ファイルを確認する
  3. または単に他の人が言ったようにString.formatを使用してください
23
ohdroid

リソースでフォーマットされたパラメーターを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に設定する必要があります

12
ByteArtisan

File -> Invalidate Caches / Restart...、それは私のために問題を修正しました。

5
Bernd Kampl

「クリーンプロジェクト」を実行してから、Android Studio。

それは私のためにそれを修正しました、それはいくつかのマイナーなAndroid Studio/Lintのバグのように見えます。

1
Venu G.

おそらくStringクラスのformatメソッドがありません。TextViewで設定する場合、適切な方法は次のとおりです。

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

必要なのはString formatterです。以下のコードを変更してください

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

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

詳細情報については 参照

0
Shadow Droid

関数を作成し、その中にコードを入れて、この@SuppressLint("StringFormatInvalid")を関数の直前に追加します。それが役に立てば幸い。

0
Shivam Maindola