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);
}
});