2015-09-18 11 views
16

Oto moja konfiguracja i moje wykroczenie, nie jestem pewien, jak to naprawić?Uaktualniłem Androida z targetSdk 22 na 23 i otrzymuję NoSuchMethodError. Jak mogę to naprawić?

compileSdkVersion 23 
buildToolsVersion "23.0.1" 

defaultConfig { 
    applicationId "com.rithmio.coach" 
    minSdkVersion 19 
    targetSdkVersion 23 
} 

09-17 22:52:15.645 15249-15249/com.rithmio.coach E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.rithmio.coach, PID: 15249 
    java.lang.NoSuchMethodError: No virtual method getColor(ILandroid/content/res/Resources$Theme;)I in class Landroid/content/res/Resources; or its super classes (declaration of 'android.content.res.Resources' appears in /system/framework/framework.jar) 
      at com.rithmio.coach.mobile.fragment.WorkoutsListFragment.onCreateView(WorkoutsListFragment.java:55) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1016) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1197) 
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1562) 
      at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330) 
      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:511) 
      at com.rithmio.coach.mobile.MobileMainActivity.onStart(MobileMainActivity.java:269) 
      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236) 
      at android.app.Activity.performStart(Activity.java:6006) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

spróbuj użyć odpowiedniej wersji biblioteki wsparcia v4 - kompilacja 'com.android.support:support-v4:23.0.0' –

Odpowiedz

68

Trzeba użyć ContextCompat.getColor(), który jest częścią Biblioteki V4 Support (tak to będzie działać dla całej poprzedniej API).

ContextCompat.getColor(context, R.color.my_color) 

Trzeba będzie dodać bibliotekę Pomoc V4 przez dodanie następujących do tablicy dependencies wewnątrz aplikacji build.gradle:

compile 'com.android.support:support-v4:23.0.1' 

Jeśli dbasz o kategoryzacji, dokumentacja wskazuje, że metody użyje kontekście tematem:

Począwszy M, powrócił kolor będzie stylizowany na temat w określonym kontekstowego za

+0

To jest poprawna metoda i działa ze wszystkimi wersjami Build Tools i Android. –

3

jeśli używasz Resource.getColor (int id) metody obrębie fragmentu następnie jest przestarzałe jak wspomniano w documentation
Więc rozwiązanie jest albo iść do Resource.getColor (int id, motyw Resource.Theme) jako wzmianka w dokumentacji ... ale musisz umieścić to przy użyciu warunku, sprawdzając wersję Android o r
Można użyć klasę ContextCompat od v4 biblioteki jako wzmianki here

Powiązane problemy