【Android】NoSuchMethodErrorが出た時の対処法 ~ APIレベルで処理を分岐
こんにちわ、pencoです。
Android開発にもそろそろ慣れてきたかなと思う今日この頃ですが、まだまだ見たことのないエラーに遭遇するもので。。。
今回発生したエラーは【java.lang.NoSuchMethodError】。必要なメソッドが見つからない場合に発生する例外だそうです。
エラーの原因
見つからなかったメソッド名は、エラーに続けて書いてありました。
今回は 「android.graphics.Bitmap.getByteCount」
調べてみると、上記のメソッドは API level 12 から使用出来るメソッドでした。
今回エラーを吐き出した端末は Android 2.3.4 でAPI level 10。
なるほど。それは見つからないわけだ。
ターゲットSDKバージョン14で開発中のアプリでしたので、
ついついターゲット端末で動作確認をしてしまいがちですね。
最近はサポートライブラリの充実で、下位APIとの互換が取りやすくなっているので、あまり意識していなかったのかもしれません。反省反省。
エラー回避方法
と、いうことで解決策です。
エラーの元となったメソッドの代替案を考え、API level 12未満と以上で処理を分岐することにしました。
if (Build.VERSION.SDK_INT >= 12) { //getByteCount()はAPI Lv12から size = bitmap.getByteCount() / 1024; }else{ size = (bitmap.getRowBytes() * bitmap.getHeight()) / 1024; }
bitmap.getRowBytes() と bitmap.getHeight() はどちらもAPI level 1 から使えるメソッドです。
Build.VERSION.SDK_INT でAPIレベルを取得し、処理を分岐しています。
これで問題は解決出来ました。
本日はここまで。
コメントをどうぞ