背景執行緒中 editText.setText(value) 其中 value 為 int,拋出 Resources$NotFoundException: String resource ID #0x0。
TextView.setText(int) 被解釋為字串資源 ID (R.string.xxx),而非數值顯示。value=0 對應資源 ID 0,系統找不到資源拋出異常。
// 錯誤
editText.setText(value); // value 為 int
// 正確
editText.setText(String.valueOf(value));
// 或
editText.setText(Integer.toString(value));
// 或 Kotlin
editText.text = value.toString()
Runnable runnable = new Runnable() {
@Override
public void run() {
for (int i = 0; i <= 10; i++) {
final int value = i;
try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
handler.post(() -> editText.setText(String.valueOf(value))); // 修正處
}
}
};
| 方法簽名 | 用途 | 備註 |
|---|---|---|
setText(CharSequence) | 顯示任意字串 | 最常用,String 實作 CharSequence |
setText(int) | 顯示字串資源 | 參數必須是 R.string.xxx,非數值 |
setText(char[], int, int) | 顯示字元陣列片段 | 低階用法 |
String.valueOf() / Integer.toString() / "" + value。setText(R.string.app_name) 而非魔術數字。TextView.setText(Int) 可自行定義轉字串版本避免混淆。一個 int 參數的多態陷阱,理解 setText(int) 語義為資源 ID 而非數值顯示,是 Android 開發必修課。