39
39

More than 5 years have passed since last update.

Android Asynchronous Http Clientを使ってみた

Last updated at Posted at 2012-08-31

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

主要クラス図

クラス図

39
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
39