首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 執行緒更新 UI:setText(int) 被誤判為資源 ID 導致崩潰

     編輯:程式設計綜合問答

錯誤現象

背景執行緒中 editText.setText(value) 其中 value 為 int,拋出 Resources$NotFoundException: String resource ID #0x0。

根本原因

TextView.setText(int) 被解釋為字串資源 ID (R.string.xxx),而非數值顯示。value=0 對應資源 ID 0,系統找不到資源拋出異常。

修正:轉換為 String


// 錯誤
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)));  // 修正處
        }
    }
};

TextView.setText 重載對照

方法簽名用途備註
setText(CharSequence)顯示任意字串最常用,String 實作 CharSequence
setText(int)顯示字串資源參數必須是 R.string.xxx,非數值
setText(char[], int, int)顯示字元陣列片段低階用法

避坑指南

  • 數值顯示必須轉字串:String.valueOf() / Integer.toString() / "" + value。
  • 資源 ID 傳遞時明確標註:setText(R.string.app_name) 而非魔術數字。
  • Kotlin 擴展函數:TextView.setText(Int) 可自行定義轉字串版本避免混淆。

一個 int 參數的多態陷阱,理解 setText(int) 語義為資源 ID 而非數值顯示,是 Android 開發必修課。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved