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

Android Resources$NotFoundException Resource ID #0x4:圖片資源 ID 傳遞錯誤排查

     編輯:程式設計綜合問答

錯誤現象


int imageId = (Integer) intent.getExtras().get(ProfilePageNormalUser.class.getName());
InputStream is = getResources().openRawResource(imageId); // 崩潰
// Resources$NotFoundException: Resource ID #0x4

根本原因

imageId = 4 (0x4) 並非有效的 R.raw.xxx 資源 ID。可能原因:

  1. Intent 傳遞錯誤:putExtra 時放入的是 drawable ID 而非 raw ID,或放入了位置索引而非資源 ID
  2. Key 不匹配:get(ProfilePageNormalUser.class.getName()) 取值 Key 與發送端 putExtra 的 Key 不一致
  3. 資源不存在:res/raw/ 目錄下無對應文件

排查步驟


// 1. 發送端檢查
Intent intent = new Intent(this, TargetActivity.class);
// 正確:傳遞 raw 資源 ID (整數)
intent.putExtra("image_res_id", R.raw.my_image); // 如 0x7f040001
// 錯誤:傳遞 drawable ID
// intent.putExtra("id", R.drawable.my_image); 
// 錯誤:傳遞數組索引
// intent.putExtra("id", position); 

startActivity(intent);

// 2. 接收端驗證
int imageId = getIntent().getIntExtra("image_res_id", -1);
if (imageId == -1) {
    // 處理無效 ID
    return;
}
Log.d("DEBUG", "Received imageId: 0x" + Integer.toHexString(imageId)); // 應為 0x7f04xxxx

// 3. 類型區分:raw vs drawable
// openRawResource 只接受 R.raw.xxx
// drawable 用 BitmapFactory.decodeResource(res, R.drawable.xxx)

資源 ID 範圍參考

資源類型ID 範圍 (十六進制)訪問方法
drawable0x7f02xxxxBitmapFactory.decodeResource(res, id)
raw0x7f04xxxxres.openRawResource(id) / res.openRawResourceFd(id)
layout0x7f03xxxxLayoutInflater.inflate(id, parent)
string0x7f05xxxxres.getString(id)
id (View)0x7f08xxxxfindViewById(id)

0x4 顯然不在任何正常資源 ID 範圍內 (均以 0x7f 開頭)。

修正建議

  1. 統一 Key 常量:public static final String EXTRA_IMAGE_RES_ID = "extra_image_res_id";
  2. 傳遞 raw 資源 ID:確保圖片放在 res/raw/,傳 R.raw.xxx
  3. 或傳遞 drawable ID 並用 decodeResource:

// 發送
intent.putExtra(EXTRA_IMAGE_RES_ID, R.drawable.my_image);

// 接收
int resId = getIntent().getIntExtra(EXTRA_IMAGE_RES_ID, -1);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);
  1. 大圖片勿放 raw:raw 文件不會壓縮,APK 體積暴增。大圖放 drawable-nodpi 或網絡下載
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved