2015-05-15 15 views
18

Otrzymuję komunikat "nosuchmethod error" na niektórych telefonach użytkownika (np. Motorola Razr i), ale działa dobrze na moim HTC. Poniżej znajduje się kod.Dlaczego funkcja getDrawable() nie działa na niektórych urządzeniach z systemem Android?

Drawable rBlack; 
rBlack = getResources().getDrawable(R.drawable.rblack, getTheme()); 

java.lang.NoSuchMethodError: android.content.res.Resources.getDrawable 
at org.petero.droidfish.myClass.onCreate(myClass.java:434) 
at android.app.Activity.performCreate(Activity.java:5248) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 
at android.app.ActivityThread.access$800(ActivityThread.java:139) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5102) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:619) 
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
at dalvik.system.NativeStart.main(Native Method) 

A jeśli mogę użyć tego kodu:

flipButton.setImageDrawable(getDrawable(R.drawable.rblack)); 

otrzymuję ten błąd

java.lang.NoSuchMethodError: org.myclass.getDrawable 
at org.myclass.onCreate(myclass.java:435) 
at android.app.Activity.performCreate(Activity.java:5248) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 
at android.app.ActivityThread.access$800(ActivityThread.java:139) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5102) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:803) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:619) 
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) 
at dalvik.system.NativeStart.main(Native Method) 
+0

Która część tego wyrażenia złożonego zawiedzie (wskazówka, złamać go w wielu wierszach, a następnie dodawać ślad stosu). Gdzie dokładnie zdefiniowano R.drawable.rblack? Czy może znajdować się w jednym folderze, ale nie w innym? –

+0

java.lang.NoSuchMethodError: org.myclass.getDrawable ... rBlack znajduje się tylko w folderze do rysowania, a nie w innym hdpi, ldpi itp. Czy to może być problem? – savante

+1

Dodaj ślad stosu z logcat – Squonk

Odpowiedz

37

Zamierzam postawić się niepowodzeniem na getDrawable(R.drawable.rblack, getTheme()); który został dodany w 21 API. Zmień tę linię na:

if(android.os.Build.VERSION.SDK_INT >= 21){ 
    rBlack = getResources().getDrawable(R.drawable.rblack, getTheme()); 
} else { 
    rBlack = getResources().getDrawable(R.drawable.rblack); 
} 
+0

Próbowałem obu. (minSDK = 17) ten sam wynik: – savante

+0

@savante: min SDK nie ma znaczenia, tylko SDK, że jesteś w sprawach. Czy byłeś w stanie go uruchomić, czy nie? W obliczu tego samego problemu. – IcyFlame

+0

@IcyFlame odkąd Savante przyjął moją odpowiedź po swoim/jej komentarzu, powiedziałbym, że można bezpiecznie założyć, że działa on przy użyciu mojego rozwiązania. Jeśli żadne z rozwiązań tutaj nie działa, polecam zadać nowe pytanie. Możesz nawet utworzyć łącze do rozwiązań w tym pytaniu jako coś, co już wypróbowałeś, aby nie zostać oznaczonym jako duplikat. – ChrisStillwell

27
ContextCompat.getDrawable(Context context, int id) 
+1

Pytanie brzmi: * Dlaczego funkcja getDrawable() nie działa na niektórych urządzeniach z systemem Android? "*. To wcale nie odpowiada na pytanie. - [Z recenzji] (http://stackoverflow.com/review/low-quality-posts/11165112) – Pang

+3

Założę się, że OP chciał rozwiązania, a nie technicznej przyczyny awarii. W aktualnej dacie jest to poprawna odpowiedź. – ElYeante

+0

To samo stało się ze mną w jakimś starym urządzeniu. Bezpieczniej jest używać metod ContextCompat. Naprawdę nie wiem, dlaczego getDrawable nie działa, powinno! – Lancelot

0

spróbuj dodać następujący wiersz kodu:

context.getResources().getDrawable(R.drawable.your_image_name); 
Powiązane problemy