エントリー

AndroidでHTTP通信

2年くらい前にAndroidをさわったときは org.apache.http でHTTPリクエストしていたけど、今は使えなくなっているらしい。

どうやら、OkHttpというのを使うのがイマドキらしい。ので試してみた。

確かに org.apache.http を使うよりも、超シンプルなコードになるのでいい感じ。以前作った org.apache.http を簡単に扱えるようにするクラスが用済みになってしまったけど、無事に通信できたので良しとする。

以下、上に書かれた内容と同じだけど自分の作業メモ。

compile 'com.squareup.okhttp:okhttp:2.5.0'

でライブラリを取り込んで、マニフェストファイルで

<uses-permission android:name="android.permission.INTERNET" />

を指定して、以下のコードで通信テスト。リソースファイルは略。

package org.refirio.request;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;

import java.io.IOException;

public class MainActivity extends Activity {

    private TextView message;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        message = (TextView)this.findViewById(R.id.message);

        // データ取得(GET)
        Button button_get = (Button)this.findViewById(R.id.button_get);
        button_get.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                new AsyncTask<Void, Void, String>() {
                    @Override
                    protected String doInBackground(Void... params) {
                        String result = null;

                        // リクエストオブジェクトを作って
                        Request request = new Request.Builder()
                                .url("http://httpbin.org/headers")
                                .get()
                                .build();

                        // クライアントオブジェクトを作って
                        OkHttpClient client = new OkHttpClient();

                        // リクエストして結果を受け取って
                        try {
                            Response response = client.newCall(request).execute();
                            result = response.body().string();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        // 返す
                        return result;
                    }

                    @Override
                    protected void onPostExecute(String result) {
                        message.setText("Result: " + result);
                    }
                }.execute();

            }

        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

ページ移動

ユーティリティ

カテゴリー

検索

エントリー検索フォーム
キーワード

過去ログ

過去ログ表示フォーム
キーワード

Feed