1. 程式人生 > >【Android】AS警告:Do not concatenate text displayed with setText. Use resource string with placeholders.

【Android】AS警告:Do not concatenate text displayed with setText. Use resource string with placeholders.

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/80167402

【錯誤】

Do not concatenate text displayed with setText. Use resource string with placeholders.

【翻譯】

不要在setText方法中顯示地連線字串。使用帶佔位符的資源字串。

【造成原因】

在TextView物件引用setText方法時,傳入的是自己連線的字串。

【舉例】

字串資源(strings.xml):

<resources>
    <string name="txtText1">text1:</string>
    <string name="txtText2">text2:</string>
    <string name="txtText3">text3:</string>
    <string name="txtText4">text4:</string>
</resources>

Java程式碼:

    TextView textView = new TextView(this);

    private void mySetText(int i) {
        textView.setText(getString(R.string.txtText1) + i);
        // 此處報錯:Do not concatenate text displayed with setText. Use resource string with placeholders.
    }

    private void mySetText(float f) {
        textView.setText(getString(R.string.txtText2) + f);
        // 此處報錯:Do not concatenate text displayed with setText. Use resource string with placeholders.
    }

    private void mySetText(String s) {
        textView.setText(getString(R.string.txtText3) + s);
        // 此處報錯:Do not concatenate text displayed with setText. Use resource string with placeholders.
    }

    private void mySetText(int i, float f, String s) {
        textView.setText(getString(R.string.txtText4) + i + "\t" + f + "\t" + s);
        // 此處報錯:Do not concatenate text displayed with setText. Use resource string with placeholders.
    }

【解決方法】

1、在資原始檔strings.xml中修改字串內容。

<resources>
    <string name="txtText1">text1:%1$d</string>
    <string name="txtText2">text2:%1$f</string>
    <string name="txtText3">text3:%1$s</string>
    <string name="txtText4">text4:%1$d\t%2$f\t%3$s</string>
</resources>

2、在TextView物件引用setText方法時,傳入getString方法。

    TextView textView = new TextView(this);

    private void mySetText(int i) {
        textView.setText(String.format(getString(R.string.txtText1), i));
    }

    private void mySetText(float f) {
        textView.setText(String.format(getString(R.string.txtText2), f));
    }

    private void mySetText(String s) {
        textView.setText(String.format(getString(R.string.txtText3), s));
    }

    private void mySetText(int i, float f, String s) {
        textView.setText(String.format(getString(R.string.txtText4), i, f, s));
    }

【解釋】

利用String類的format方法,識別傳入字串格式,然後再組合,以確保程式的穩定性。

格式說明:“%1”代表第1個引數;

                 “%2”代表第2個引數;

                 “%3”代表第3個引數;

                 “$d”代表整型;

                 “$f”代表浮點型;

                 “$s”代表字串。

【相關警告】

錯誤:Do not concatenate text displayed with setText. Use resource string with placeholders.

詳見:https://blog.csdn.net/u013642500/article/details/80166941

【說明】

本文可能未必適用所有情形,本人尚屬初學者,如有錯誤或疑問請評論提出,由衷感謝!