お使いのブラウザは、バージョンが古すぎます。

このサイトは、Internet Explore8・Internet Explore9には対応しておりません。
恐れ入りますが、お使いのブラウザをバージョンアップしていただきますよう宜しくお願いいたします。

【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レベルを取得し、処理を分岐しています。
これで問題は解決出来ました。
 
 
本日はここまで。

コメントをどうぞ

メールアドレスは公開されません。* が付いている欄は必須項目です。


お気軽にお問い合わせください。

日本VTR実験室では、お仕事のご依頼、ブログ・コラムのご感想などを受け付けております。
アプリ開発・コンテンツ制作でお困りでしたら、お気軽にご相談ください。
ご連絡お待ちしております。

お問い合わせはこちらから

03-3541-1230

info@nvtrlab.jp

電話受付対応時間:平日AM9:30〜PM6:00