2010-12-27 5 views
41

Gibt es eine in Art und Weise gebaut zu überprüfen, um festzustellen, ob eine Ressource vorhanden ist, um zu sehen, ob eine Ressource vorhanden ist, oder bin ich links in etwa wie folgt vorgehen:Wie prüfe ich in Android

boolean result; 
int test = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); 
result = test != 0; 
+0

Es ist nicht eine sehr harte Weise scheinen zu mach das. Was stört dich bei dieser Methode? –

+0

Vielleicht nicht, aber ich mag Einbauten, die die Fehlerbehandlung für mich tun, anstatt zu versuchen/schließlich überall. – user432209

+0

Sie benötigen hier keine Fehlerbehandlung. Lesen Sie meinen Kommentar unten. –

Antwort

46

Nach dem javadoc Sie brauchen den Versuch nicht fangen: http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29

Wenn getIdentifier() Null zurückgibt, bedeutet es, dass keine solche Ressource vorhanden ist.
Auch 0 - ist eine illegale Ressource ID.

So entspricht Ihre boolesche Ergebnisvariable (test != 0).

Wie auch immer Ihr Versuch/schließlich ist schlecht, denn alles es setzt die Ergebnisvariable auf falsch, auch wenn eine Ausnahme aus dem Körper von try geworfen wird: mContext.get..... und dann "retrows" nur die Ausnahme nach dem Herauskommen von finally-Klausel . Und ich nehme an, das ist nicht das, was Sie im Ausnahmefall tun möchten.

+3

Können Sie bitte ein Beispiel geben? –

+0

Was passiert, wenn ich "my_resource.png" und "my_resource.xml" habe? Wie kann ich sie voneinander unterscheiden? –

22

Der try/catch-Block in Ihrem Code ist völlig nutzlos (und falsch), da weder getResouces() noch getIdentifier(...) eine Ausnahme auslösen.

So, getIdentifier(...) wird Ihnen bereits alles zurückgeben, was Sie brauchen. In der Tat, wenn es 0 zurückgibt, dann existiert die gesuchte Ressource nicht. Andernfalls wird die zugeordnete Ressourcen-ID ("0 is not a valid resource ID", tatsächlich) zurückgegeben.

Hier ist der richtige Code:

int checkExistence = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); 

if (checkExistence != 0) { // the resouce exists... 
    result = true; 
} 
else { // checkExistence == 0 // the resouce does NOT exist!! 
    result = false; 
} 
3

Falls jemand fragt, die "my_resource_name" in

int checkExistence = mContext.getResources().getIdentifier("my_resource_name", "drawable", mContext.getPackageName()); 

ist eigentlich

String resourceName = String.valueOf(R.drawable.my_resource_name); 
int checkExistence = mContext.getResources().getIdentifier(resourceName , "drawable", mContext.getPackageName()); 
Verwandte Themen