Mój kod działał dobrze na emulatorze, jednak gdy tylko spróbowałem uruchomić kod na urządzeniu (w tym przypadku Nexus 5), zacząłem otrzymywać DUŻO zasobów. Większość wyjątków dotyczy plików rysunkowych lub kolorowych. Na przykład:

android.content.res.Resources$NotFoundException: File res/drawable/blob_ocean.xml from drawable resource ID #0x7f060066

Logcat następnie stwierdza, że błąd jest spowodowany przez:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/blob_ocean.xml from drawable resource ID #0x7f060066

Następnie stwierdza, że poprzedni błąd jest spowodowany przez:

 Caused by: android.content.res.Resources$NotFoundException: File res/color/radial_pink.xml from color state list resource ID #0x7f04004e

Te dwa przykłady występują we fragmencie w wierszu z AnimatedVectorDrawable.

public class BlobFragment extends Fragment {
private AnimatedVectorDrawable blob;
private ImageView blobView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.blob_fragment, container, false);
    blobView = (ImageView) v.findViewById(R.id.blob_o);
    blob = (AnimatedVectorDrawable) ResourcesCompat.getDrawable(getResources(), R.drawable.blob_ocean, null);
    blobView.setImageDrawable(blob);
    blob.start();
    return v;
}

}

Układ fragmentu wygląda następująco:

    <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".OceanThemeActivity">

    <ImageView
        android:id="@+id/blob_o"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:srcCompat="@drawable/blob_ocean"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.271"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Szukałem w Internecie, ale nie mogłem znaleźć czegoś, co działa. Trudno jest zidentyfikować problem, ponieważ w emulatorze wszystko działa poprawnie.

1
Kübra Uzun 20 listopad 2019, 20:48
1
Jaka jest wersja systemu operacyjnego Twojego urządzenia?
 – 
faranjit
20 listopad 2019, 20:49
Czy Twoje zasoby znajdują się w łyżkach o określonej gęstości? xhdpi, ldpi itp.? A jeśli tak, czy istnieją zasoby dla zasobnika gęstości odpowiadającego gęstości tego konkretnego telefonu?
 – 
Jarvis
20 listopad 2019, 22:27
Sprawdź folder do rysowania, czy plik jest poprawny
 – 
L2_Paver
21 listopad 2019, 05:26

1 odpowiedź

Rozwiązałem problem. Było to związane z kompatybilnością wsteczną; Używałem AnimatedVectorDrawable, który działa tylko dla API 24 lub nowszego, a moje urządzenie było niższe. Zmiana obiektów na AnimatedVectorDrawableCompat naprawiła to. Ponadto niektóre z dostępnych zasobów były zbyt duże, przez co mniejsze działały idealnie.

0
Kübra Uzun 1 grudzień 2019, 12:56