2010-12-27 8 views
41

Czy jest zbudowany w sposób sprawdzić, czy zasób istnieje, czy jestem w lewo robi coś jak następuje:Jak mogę sprawdzić, czy zasób istnieje w Androidzie

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

To nie wydają się bardzo bolesny sposób do Zrób to. Co przeszkadza ci w tej metodzie? –

+0

Być może nie, ale lubię wbudowane, które obsługują błędy, zamiast trzymać się wszystkiego. – user432209

+0

Nie potrzebujesz tutaj obsługi błędów. Przeczytaj mój komentarz poniżej. –

Odpowiedz

46

Według javadoc nie potrzebujesz próby złapania: http://developer.android.com/reference/android/content/res/Resources.html#getIdentifier%28java.lang.String,%20java.lang.String,%20java.lang.String%29

jeśli getIdentifier() zwraca zero, oznacza to, że taki zasób nie istnieje.
Również 0 - jest nielegalnym identyfikatorem zasobu.

Twoja zmienna boolean jest więc równa (test != 0).

W każdym razie twoja próba/w końcu jest zła, ponieważ wszystko to ustawia zmienną wyniku na wartość false, nawet jeśli wyjątek jest wyrzucony z ciała: spróbuj: mContext.get....., a następnie po prostu "wyrzuca" wyjątek po wyjściu z klauzuli końcowej . I przypuszczam, że nie jest to, co chcesz zrobić w przypadku wyjątku.

+3

Czy możesz podać przykład? –

+0

Co zrobić, jeśli mam "moje_resource.png" i "my_resource.xml"? Jak mogę je odróżnić między sobą? –

22

Blok try/catch w kodzie jest całkowicie bezużyteczny (i źle), ponieważ ani getResouces() ani getIdentifier(...) wyjątek.

Tak, getIdentifier(...) już zwróci Ci wszystko, czego potrzebujesz. Rzeczywiście, jeśli zwróci 0, to zasoby, których szukasz, nie istnieją. W przeciwnym razie zwróci powiązany identyfikator zasobu (w rzeczy samej: "0 is not a valid resource ID").

Oto prawidłowy kod:

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

W przypadku gdy ktoś zastanawia się, "my_resource_name" w

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

jest rzeczywiście

String resourceName = String.valueOf(R.drawable.my_resource_name); 
int checkExistence = mContext.getResources().getIdentifier(resourceName , "drawable", mContext.getPackageName()); 
Powiązane problemy