cockscomblog?

cockscomb on hatena blog

Android Studio便利テク #2 — デバッグ中にbyte[]の中身の文字列を読む

Androidアプリの開発では、デバッグ中にbyte[]型のバイト列を見ることがあります。ネットワーク通信の結果やファイルから読み出したデータなど様々ですが、たいていの場合は文字列です。本記事では、Android Studiobyte[]の内容を簡単に確かめる方法を紹介します。


例えばネットワーク通信のレスポンスとして、40Xのステータスコードと共に、ボディにエラーの内容を表すバイト列が含まれているとします。そのようなとき、エラーの内容を知るために

byte[] body = response.getBody();
Log.d(TAG, new String(body));

のようなコードを事前に仕掛けておいてログを眺めるのはいかにも効率が悪いですね。このようなプリントデバッグでは、目的の情報が得られるまでに何度も実行してみないといけないかもしれません。

ブレークポイントを置いてデバッガで止めてみるのは良いアイデアです。しかしデバッガでVariablesを見てみても、表示されるのはただのbyteの配列であり、お世辞にもわかりやすいとは言えません。

f:id:cockscomb:20140805193018p:plain
デバッガでVariablesを表示するとbyte[]が見える

Expression Evaluation

デバッグ中にExpression Evaluationボタンを押すと、Javaのコードを評価できるダイアログが表示されます。

f:id:cockscomb:20140805193052p:plain
Expression Evaluationでは任意のJavaのコードを評価でき、byte[]の中身を確かめられる

String.copyValueOf(new String(message).toCharArray())

ここで上記のコードを評価すると、byte[]型の値をStringオブジェクトに変換でき、内容が表示されます。

new String(message)のようにできそうに思いますが、手元のAndroid Studio 0.8.2ではなぜかうまく表示されませんでした。

Data Type Renderers

Debuggerの設定のData Type Renderersでは、byte[]型の値を表示するのに評価されるコードを設定することができます。

String.copyValueOf(new String(this).toCharArray())

f:id:cockscomb:20140805193124p:plain
Data Type Renderersbyte[]の表示に利用するコードを設定できる

このように設定しておくことで、Variablesにいつでも内容が表示されるようになります。

f:id:cockscomb:20140805193140p:plain
Data Type Renderersが設定されているとVariablesにその評価結果が表示される

Expression Evaluationを毎回実行する必要もなくなり、たいへん便利です。


今回紹介したのはIntelliJ IDEA由来のデバッグ機能です。便利な機能を利用することで、より効率的に開発することができます。

ここでお知らせですが、筆者の勤務先である株式会社はてなが、京都でAndroidの勉強会を開催します。

「京都 Android 勉強会」を8/23(土)に京都で開催します! #kyotoandroid - Hatena Developer Blog

筆者も発表を行いますので、皆さまぜひご参加ください。懇親会でお待ちしています。