Android

Android Asynchronous Http Clientを使ってみた

More than 5 years have passed since last update.


Android Asynchronous Http Client

Apache HttpClientを使いやすくライブラリ化したもの

本家はここ

javaDocはここ

追記※非同期でネットワークアクセスできるものの、受信データの扱いはUIスレッドで行うことになるので、データのパースが重い場合などは向かないかも


非同期通信の実装例

AsyncHttpClientをnewして利用するだけ。とっても簡単。下記はyahooのトップページを取得する例

final AsyncHttpClient client = new AsyncHttpClient();

Button btn = (Button)findViewById(R.id.btn1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final ProgressDialog progress = new ProgressDialog(MainActivity.this);
progress.setTitle("Get Yahoo page");

// 注意:onStart -> onSuccess -> onFinishの順番で呼ばれる
client.get("http://www.yahoo.co.jp", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
progress.dismiss();
Log.i(TAG, "onSuccess");
Log.v(TAG, response);
Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
}

@Override
public void onFinish() {
Log.i(TAG, "onFinish");
progress.dismiss();
}

@Override
public void onStart() {
Log.i(TAG, "onStart");
progress.show();
}
});
}
});


JSONデータの取得の例

JsonHttpResponseHandlerを使えばJSONObjectで取得できる。

String url = "http://api.atnd.org/events/";

RequestParams params = new RequestParams();
params.put("twitter_id", "tomo_watanabe");
params.put("format", "json");

client.get(url, params, new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONObject json) {
Log.i(TAG, "onSuccess: JSONObject");
Log.i(TAG, json.toString());
}
});


画像のダウンロードの例

(このサンプルだと、onSuccess()のUIスレッドでBitmapデコードしてるので、あまり良くないとの指摘ありました)

String[] allowedContentTypes = new String[] { "image/png", "image/jpeg" };

client.get("https://si0.twimg.com/profile_images/2298573260/j84ygij3d64npr5yzxt3.png",
new BinaryHttpResponseHandler(allowedContentTypes) {
@Override
public void onSuccess(byte[] fileData) {
ImageView image = (ImageView)findViewById(R.id.imageView);
Bitmap bitmap = BitmapFactory.decodeByteArray(fileData, 0, fileData.length);
image.setImageBitmap(bitmap);
}
});


主要クラス図

クラス図