web-dev-qa-db-ja.com

Android targetSdk 22から23にアップグレードしましたが、NoSuchMethodErrorが発生しています。どうすれば修正できますか?

これが私の設定と私の例外です、これを修正する方法がわかりませんか?

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)
17
Kamilski81

サポートV4ライブラリの一部である ContextCompat.getColor() を使用する必要があります(これにより、以前のすべてのAPIで機能します)。

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

アプリのbuild.gradle内のdependencies配列に以下を追加して、Support V4ライブラリを追加する必要があります。

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

テーマ設定に関心がある場合、ドキュメントはメソッドがコンテキストのテーマを使用することを指定しています:

Mから始まり、返された色は、指定されたコンテキストのテーマに合わせてスタイル設定されます

87
Melvin

フラグメント内でResource.getColor(int id)メソッドを使用している場合、 ドキュメント で説明されているように、deprecatedです。
したがって、解決策は、ドキュメントで言及されているようにResource.getColor(int id, Resource.Theme theme)のどちらかです...しかし、その後、それを置く必要がありますAndroidバージョンまたはをチェックしてif条件を使用する
言及としてContextCompatクラスをv4ライブラリから使用できますここ

4
Shadow Droid