[Android] HTTPリクエストの状態を確認したい
HTTPリクエストの状態を確認したい
APIの通信処理などを実装していると、リクエストヘッダーやレスポンスヘッダーなどの情報を確認したいということはよくあると思います。 基本的にはログに出力するなどして対応すると思いますが、Facebookが公開している stetho というライブラリがとてもいい感じだったので紹介したいと思います。
stetho導入
stethoのライブラリと、通信用ライブラリとして今回はretrofitのライブラリを導入します。
compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.facebook.stetho:stetho:1.0.0' compile 'com.facebook.stetho:stetho-okhttp:1.1.1'
実装
stethoの初期化
Applicationクラスでstethoの初期化処理を記述します
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); Stetho.initialize(Stetho.newInitializerBuilder(this) .enableDumpapp(Stetho.defaultDumperPluginsProvider(this)) .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)) .build()); } }
通信処理
今回は、例として http://express.heartrails.com/ から都道府県名の一覧を取得する通信処理を実装したいと思います。 ※retrofitの使用方法については省略します。
JSONデータで返却されるので、パース用のモデルを作成します。
public class SampleModel { public List<Prefecture> response; public class Prefecture{ public String prefecture; } }
retrofitのインターフェースを作成します。
public interface SampleApi { @GET("/api/json") void get(@Query("method") String method, Callback<SampleModel> callback); }
OkHttpClient の networkInterceptors に StethoInterceptor を差し込んで、retrofit の RestAdapter で使用する Client として設定します。
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button)findViewById(R.id.request_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { OkHttpClient client = new OkHttpClient(); client.networkInterceptors().add(new StethoInterceptor()); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("http://express.heartrails.com/") .setClient(new OkClient(client)) .setLogLevel(RestAdapter.LogLevel.FULL) .build(); restAdapter.create(SampleApi.class).get("getPrefectures", new Callback<SampleModel>() { @Override public void success(SampleModel sampleModel, Response response) { Toast.makeText(MainActivity.this, "success", Toast.LENGTH_SHORT).show(); } @Override public void failure(RetrofitError error) { Toast.makeText(MainActivity.this, "failure", Toast.LENGTH_SHORT).show(); } }); } }); } }
以上で準備完了です。
確認する
android端末をUSBデバックで接続して、アプリを起動します。 "chrome://inspect" から Chrome DevTool の Device を選択すると、接続している端末とstethoが導入されているアプリ名が表示されるので、inspect をクリックしてデベロッパーツールを表示します。
あとは、端末から通信処理を実行すると、以下の様にMethodやStatus、Timelineなどが視覚的に確認できます!
さらには、リクエストヘッダーやレスポンスヘッダー、レスポンス内容なども簡単に確認することができます。
まとめ
簡単に実装でき実際のリクエスト内容などが視覚的に確認できて,とても便利だと思いました。 また、SQLiteのDB情報も確認できるようなので、今度チャレンジしてみたいと思います。
以上です。