2016-03-01 2 views
1

Я получаю сбой в этом действии при запуске приложения. Это связано не с appcompat, как вы можете видеть в трассировке стека. Это собственный класс android ListView, метод которого не найден во время запуска приложения.Android-приложение crashing java.lang.NoSuchMethodError

То же самое приложение работает на других устройствах. MinSdkVersion = 13 мишень = 23 макс = 23 и текущее устройство сбою является API 17.

FATAL EXCEPTION: main 
java.lang.NoSuchMethodError: android.widget.ListView.setElevation 
at com.example.saloni.laughgurumarketingapp.ContentDetails.getValues(ContentDetails.java: 392) 
at com.example.saloni.laughgurumarketingapp.ContentDetails.onCreate(ContentDetails.java: 298) 
at android.app.Activity.performCreate(Activity.java: 5122) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1081) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 2270) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 2358) 
at android.app.ActivityThread.access$600(ActivityThread.java: 156) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java: 1340) 
at android.os.Handler.dispatchMessage(Handler.java: 99) 
at android.os.Looper.loop(Looper.java: 153) 
at android.app.ActivityThread.main(ActivityThread.java: 5297) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java: 511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 833) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 600) 
at dalvik.system.NativeStart.main(Native Method) 

В коде это просто набор методов возвышения, на котором он разваливается, как вы можете увидеть в след. Аналогичным образом он разбился в последний раз на использовании одного из методов класса TextView. Почему это происходит?

ответ

4

Нет метода setElevation() в api 17. Вам нужно только называть это на api 21 и выше.

https://developer.android.com/reference/android/view/View.html#setElevation(float)

Если вы хотите, чтобы вызвать этот метод на апи 21 устройства делают это:

int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
if (currentapiVersion >= android.os.Build.VERSION_CODES.LOLLIPOP){ 
    // Do something for lollipop and above versions 
} else{ 
    // do something for phones running an SDK before lollipop 
} 
+0

, но если это так, то в чем заключается использование минимальной версии sdk? если метод определенно собирается сбой, то зачем делать его доступным для разработчиков? – Sushobhit333

+0

взгляните на это http://stackoverflow.com/a/3940823/1764080 Это нужно сделать для этого вызова метода – Shmuel

2

Вы можете использовать ViewCompat.setElevation и ваше приложение не будет врезаться на пре-21 системы; однако это не повлияет на эти старые устройства.