android.Inhalt.res.Resources$NotFoundException: Resource ID #0x0

Ich versuche zum erstellen einer benutzerdefinierten Ansicht mit Bild aus der drawable Ordner.
das Bild, das das Programm wählen Sie aus dem Ordner hängt auf dem client, so muss ich den Ansatz der R-Datei mit einer variable.
nach einer recherche habe ich festgestellt, dass die Art und Weise zu tun, es ist so:

String uriName = ":drawable/"+thisCard.getKind()+thisCard.getNumber();
int idUri = getResources().getIdentifier(uriName , null , PACKAGE_NAME);
Drawable tmp = getResources().getDrawable(idUri , getContext().getTheme());
cardImage.setImageDrawable(tmp);

aber ich bekomme eine RuntimeException von "android.Inhalt.res.Resources$NotFoundException: Resource ID #0x0"

wenn ich gesucht die Ausnahme bekam ich Antworten, die mir erzählte, zu tun, was ich Tat, in den Absatz, den ich schrieb.
was mache ich falsch?

können, können Sie auch im code sehen, die ich Hinzugefügt nach unten, dass ich eingefügt eine Log-Befehl für debug. wenn ich Debuggen diese Zeile zeigt zweimal. Gibt es einen Grund, warum diese Methode zwei mal aufgerufen, wenn ich rufe es nur einmal?

Ich Hinzugefügt mein code und der stacktrace.

Dies ist ein Teil der Klasse (es erstreckt Ansicht)

public void setCard(Card card){
    thisCard = card;
    isSet = true; 
    //in the Card constructor isSet is false so it does not suppose to go in the method setCardImage() yet.
    invalidate();
}

private void setCardImage(){

    String uriName = ":drawable/"+thisCard.getKind()+thisCard.getNumber();

    try {

        cardImage = (ImageView)findViewById(R.id.cardImage);
        int idUri = getResources().getIdentifier(uriName , null , PACKAGE_NAME);

         Drawable tmp = getResources().getDrawable(idUri , getContext().getTheme());
        cardImage.setImageDrawable(tmp);

        Log.d(TAG , "im here");
    }catch(NullPointerException e){
        e.printStackTrace();

    }
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if(isSet) {
        setCardImage();
    }
}

dies ist die MainActivity:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    testView = (CardView)findViewById(R.id.testView);
    Card card = new Card("club" , 2);
    testView.setCard(card);

}

- und das ist der StackTrace:

08-26 07:54:33.135 2364-2364/com.example.danac.cards E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   Process: com.example.danac.cards, PID: 2364
                                                                   android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                                       at android.content.res.Resources.getValue(Resources.java:1351)
                                                                       at android.content.res.Resources.getDrawable(Resources.java:804)
                                                                       at com.example.danac.cards.CardView.setCardImage(CardView.java:51)
                                                                       at com.example.danac.cards.CardView.onDraw(CardView.java:65)
                                                                       at android.view.View.draw(View.java:16178)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15174)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.draw(View.java:16181)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15174)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15169)
                                                                       at android.view.View.draw(View.java:15948)
                                                                       at android.view.ViewGroup.drawChild(ViewGroup.java:3609)
                                                                       at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399)
                                                                       at android.view.View.draw(View.java:16181)
                                                                       at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2690)
                                                                       at android.view.View.updateDisplayListIfDirty(View.java:15174)
                                                                       at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
                                                                       at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
                                                                       at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
                                                                       at android.view.ViewRootImpl.draw(ViewRootImpl.java:2615)
                                                                       at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2434)
                                                                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067)
                                                                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
                                                                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
                                                                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
                                                                       at android.view.Choreographer.doCallbacks(Choreographer.java:670)
                                                                       at android.view.Choreographer.doFrame(Choreographer.java:606)
                                                                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
                                                                       at android.os.Handler.handleCallback(Handler.java:739)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                       at android.os.Looper.loop(Looper.java:148)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

danke

BEARBEITEN :
der xml, dass bestimmte anzeigen:

      <com.example.danac.cards.CardView
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:id="@+id/testView"/>
  • Ich erraten Sie Sie haben, aber Sie haben versucht, um die Anzeige der idUri, um zu überprüfen, ob der Pfad ist der richtige?
  • sind Sie mit .svg-drawables??
  • wenn ich ausgetestet, es kehrte zu mir zurück mit dem korrekten Paket (PACKAGE_NAME = getContext().getPackageName();
  • Im mit .png, wenn es das ist was du meinst
InformationsquelleAutor DanaCh | 2016-08-26
Schreibe einen Kommentar