Help us understand the problem. What is going on with this article?

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

主要クラス図

クラス図

tomo_watanabe
組込み → Android → HTML5的な
http://tomowatanabe.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away