Ресурсы $ NotFoundException: идентификатор ресурса # 0x0 - PullRequest
0 голосов
/ 05 ноября 2018

Я сохраняю имя изображения с расширением в примере sqlite ("food.xml").

когда я получаю имя изображения и пытаюсь установить его в ImageView, я получаю эту ошибку.

Мой класс адаптера

String uri = "@drawable/" + expenseCategory.getCategory_image();
int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName());
Drawable res = context.getResources().getDrawable(imageResource);
cat_img.setImageDrawable(res);

XML-файл

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:padding="5dp">

<LinearLayout
    android:id="@+id/image_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >

    <ImageView
        android:id="@+id/item_img"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/circleyellow"
        android:padding="5dp"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/food" />
</LinearLayout>


<TextView
    android:id="@+id/item_cat_text"
    android:layout_width="50dp"
    android:gravity="center"
    android:layout_height="wrap_content"
    android:layout_below="@+id/image_layout"
    android:text="Food"
    android:textColor="#000"
    android:textSize="12sp" />
</RelativeLayout>

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Вы все делаете неправильно ..

попробуйте так

int resourceId = context.getResources().getIdentifier(imageName, "drawable", context.getPackageName());
if (resourceId != 0)
    cat_img.setImageDrawable(context.getResources().getDrawable(resourceId));
else
    cat_img.setImageDrawable(context.getResources().getDrawable(R.drawable.some_icon));
0 голосов
/ 05 ноября 2018

Удалить расширение из переменной URI. Вы должны выглядеть как @ drawable / food

context.getResources().getIdentifier("@drawable/food", null, context.getPackageName());

то же самое с

context.getResources().getIdentifier("food", "drawable", context.getPackageName());

Также убедитесь, что ваш resId не равен 0

0 голосов
/ 05 ноября 2018

Вы не должны включать @drawable/, поэтому при условии, что expenseCatetory.getCategory_image(); вернет имя файла, которое существует в ваших чертежах, тогда это должно работать:

//String uri = "@drawable/" + expenseCategory.getCategory_image();
String fileName = expenseCategory.getCategory_image();
//int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName());
int imageResource = resources.getIdentifier(fileName, "drawable", context.getPackageName());
Drawable res = context.getResources().getDrawable(imageResource);
cat_img.setImageDrawable(res);
...