2016-10-10 165 views
0

我有用android編寫的小應用程序。Android - 可繪製路徑

從SQLite數據庫中,我提取了一些類別和圖標名稱,如(酒店,公寓等)。我在drawable文件夾中的所有圖像示例。

現在我正在嘗試閱讀這些圖像並將它們顯示在列表中,但我遇到了可繪製路徑的問題。錯誤總是:open failed: ENOENT (No such file or directory)

下面是代碼示例:

@Override 
public View getView(int position, View view, ViewGroup parent) 
{ 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView= inflater.inflate(R.layout.category_list_item, null, true); 

    Uri otherPath = Uri.parse("android.resource://"+getContext().getPackageName()+"/drawable/"); 
    String drawable_path = otherPath.toString(); 

    Toast.makeText(getContext(), drawable_path, Toast.LENGTH_LONG).show(); 

    TextView txtTitle = (TextView) rowView.findViewById(R.id.txt); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.img); 
    TextView categoryID = (TextView) rowView.findViewById(R.id.category_id); 

    txtTitle.setText(items.get(position)); 
    imageView.setImageDrawable(Drawable.createFromPath(drawable_path+imageIds.get(position)+"\"")); 
    categoryID.setText(category_ids.get(position)); 

    return rowView; 
} 

回答

0

@Gabe Sechan給了我一個好主意,所以我解決了這個問題。如果有人有同樣的問題,這是答案。

在DB中存儲名稱,然後將其轉換爲int,以便您可以設置圖像資源。這裏是代碼:

int resID = getContext().getResources().getIdentifier(imageIds.get(position), 
      "drawable", getContext().getPackageName()); 

imageView.setImageResource(resID); 

希望這會幫助別人。因爲我的項目工作完美。

1

我真的不建議你訪問你的可繪製這種方式。使用的ID不穩定,任何新版本都可能破壞鏈接。如果你必須通過一個外部數據庫引用它們,我可以將繪圖文件寫入文件系統,並將它們作爲普通文件引用,或者將可繪製名稱存儲在數據庫中,然後通過查找來獲取id,然後引用它通過該ID。

+0

你能告訴我一些如何通過查找來實現嗎? –