2016-07-30 32 views
4

Ich laufe in die folgende Fehlermeldung nur dann, wenn sie mit Android auf einem Samsung Galaxy Nexus Telefon testen 4.3 und API 18.

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_error.xml 
from drawable resource ID #0x7f020098 
    at android.content.res.Resources.loadDrawable(Resources.java:2091) 
    at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
    at android.widget.TextView.<init>(TextView.java:803) 
    at android.widget.EditText.<init>(EditText.java:60) 

In meinem Acitivty. Java-Datei, habe ich versucht, die folgenden Methoden, mit meinem Vektor ziehbar zu setzen:

editTextNickname.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_error, 0); 
editTextNickname.setCompoundDrawables(null, null, 
    ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_error), null); 

ich die neuesten Support-Bibliotheken in meiner build.gradle Datei verwenden, wie unten dargestellt:

apply plugin: 'com.google.gms.google-services' 
apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 24 
    buildToolsVersion "23.0.3" 

defaultConfig { 
    applicationId "com.peprally.jeremy.peprally" 
    minSdkVersion 16 
    targetSdkVersion 24 
    versionCode 1 
    versionName "1.0" 
    vectorDrawables.useSupportLibrary = true 
} 
buildTypes { 
    release { 
    minifyEnabled false 
    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
    debug { 
    debuggable true 
    } 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:24.1.1' 
    compile 'com.android.support:design:24.1.1' 
    compile 'com.android.support:cardview-v7:24.1.1' 
    compile 'com.android.support:support-v4:24.1.1' 
    compile 'com.android.support:support-vector-drawable:24.1.1' 
    compile 'com.facebook.android:facebook-android-sdk:4.6.0' 
    compile 'com.google.android.gms:play-services-appindexing:9.2.1' 
    compile 'com.google.firebase:firebase-core:9.2.1' 
    compile 'com.google.firebase:firebase-messaging:9.2.1' 
    compile 'com.amazonaws:aws-android-sdk-core:2.+' 
    compile 'com.amazonaws:aws-android-sdk-cognito:2.+' 
    compile 'com.amazonaws:aws-android-sdk-s3:2.+' 
    compile 'com.amazonaws:aws-android-sdk-ddb:2.+' 
    compile 'com.amazonaws:aws-android-sdk-ddb-mapper:2.+' 
    compile 'com.squareup.picasso:picasso:2.5.2' 
    compile 'com.android.volley:volley:1.0.0' 
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1' 
    testCompile 'junit:junit:4.12' 
} 

apply plugin: 'com.google.gms.google-services' 

Ich habe ähnliche Probleme bei StackOverflow gesehen, aber noch keine guten Lösungen. Wenn jemand irgendwelche Einsichten hat, bitte helfen Sie! Vielen Dank!

< --edit ->

Nachdem das Problem zu ignorieren und es kam zurück, fand ich eine feste Lösung rund um die VectorDrawable nicht unterstützt Problem zu erhalten.

public static Drawable getAPICompatVectorDrawable(Context callingContext, int resource_id) { 
    if (android.os.Build.VERSION.SDK_INT >= 21) { 
    return ContextCompat.getDrawable(callingContext.getApplicationContext(), resource_id); 
    } else { 
    return VectorDrawableCompat.create(
     callingContext.getResources(), 
     resource_id, 
     callingContext.getTheme()); 
    } 
} 

Ich hatte Probleme auch Vektor Drawables versuchen, direkt in XML-Dateien zu setzen: auf, was vorgeschlagen wurde, können Sie VectorDrawables mit dem Code unten erstellen. Und ich konnte keinen Weg finden, das zu umgehen, also habe ich sie schließlich aus meinen XML-Dateien genommen und sie programmatisch in Java injiziert, indem ich dieselbe Funktion wie oben benutzt habe. Der Fehler, den ich aus der Verwendung von Vektor-Draw-Dateien in meinem XML-Code habe, wird unten gezeigt. Wenn jemand eine bessere Lösung hat, würde ich es gerne hören!

java.lang.RuntimeException: Unable to start activity ComponentInfo{com. 
    peprally.jeremy.peprally/com.peprally.jeremy.peprally.activities. 
    NewCommentActivity}: 
android.view.InflateException: Binary XML file line #90: Error inflating class TextView 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
    at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #90: 
    Error inflating class TextView 

Antwort

5

Könnten Sie bitte den folgenden Code testen? Nur um zu sehen, wenn Werke ... Dann werde ich die Antwort aktualisieren mit mehr Informationen

public class MainActivity extends AppCompatActivity { 
    static { 
     AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
    } 

    @Override 
    protected void onCreate(Bundle arg0) { 
     ... 
    } 
    ... 
} 

Hintergrund

Ich war mir bewusst, dass aufgrund this Google Issue - 205236, Unterstützung Vektor Drawable wurde aufgrund deaktiviert Speicherprobleme

Einer der Kommentare in dieser Frage ist, dass:

um dieses Problem zu beheben, die Unterstützung für VectorDrawable von XML-Ressource mußte entfernt werden.

Und dann

In der nächsten Version ich ein Opt-in-API hinzugefügt haben, wo Sie können die VectorDrawable Unterstützung wieder aktivieren, die entfernt wurde.

Also, sie wieder aktiviert diese Option in
Android Support Library 23.4.0

Für AppCompat Benutzer haben wir ein Opt-in API erneut aktivieren Support-Vektor-Drawables von Ressourcen hinzugefügt (das Verhalten in 23.2 gefunden) über AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - Beachten Sie, dass dies weiterhin zu Problemen mit der Speichernutzung und zu Problemen beim Aktualisieren von Konfigurationsinstanzen führen kann. Daher ist es standardmäßig deaktiviert.

Vielleicht ist build.gradle Einstellung mittlerweile veraltet und Sie müssen es nur in der richtigen Aktivitäten ermöglichen (jedoch testen müssen).

+0

omg ja, das hat funktioniert! bitte ausführlicher! Und vielen Dank für den Tipp, ich habe tagelang nach einer Lösung gesucht! – jerbotron

+0

aber darüber hinaus stoße ich auf weitere Kompatibilitätsprobleme mit anderen UI-Komponenten wie FloatingActionButtons. – jerbotron

+0

Vielleicht missverstehe ich, aber macht diese Gradle-Einstellung nicht etwas Ähnliches? 'vectorDrawables.useSupportLibrary = true' –