Android

【Android】OkHttpを実装

説明

AndroidでOkHttpの実装します。
OkHttp URL:http://square.github.io/okhttp/

サンプルで使用するAPIは、
HeartRails Geo APIの都道府県を取得するAPIを使用します。

HeartRails Geo API URL:
http://geoapi.heartrails.com/api.html

都道府県取得(XML用) URL:
http://geoapi.heartrails.com/api/xml?method=getPrefectures

ちなみにJsonだとわかりづらいのでXMLですが、返却される値です。

実装説明

・GradleでOkHttpライブラリを設定します。

compile 'com.squareup.okhttp3:okhttp:3.8.1'

・インターネット通信を行うためパーミッションの設定をしておきます。

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

・OkHttpClienntの実態を生成します。

OkHttpClient client = new OkHttpClient();

・Requestの設定を行います。

Request request = new Request.Builder()
            .url(url)
            .build();

・Requestを送ります。
onFailure:ネットワークが繋がっていない時などの失敗時に通ります。
onResponse:正常にデータが返ってきた時に通ります。

client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                ....
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                ....
            }
        });
サンプル

activity_main.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

</android.support.constraint.ConstraintLayout>

list_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_marginLeft="10dp"
    android:gravity="center"
    android:orientation="vertical"
    android:text="TEXT"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textColor="@android:color/black"></TextView>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private OkHttpClient client;
    private ArrayList prefectures;

    private final String URL =
            "http://geoapi.heartrails.com/api/json?method=getPrefectures";

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

        client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(URL)
                .build();

        final ListView listView =
                (ListView) findViewById(R.id.list_view);

        prefectures = new ArrayList<>();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                e.printStackTrace();
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                // 取得が成功したかどうか
                if(response.isSuccessful()) {
                    String string = response.body().string();
                    try {
                        JSONObject json = new JSONObject(string);

                        JSONObject responce =
                                json.getJSONObject("response");

                        JSONArray prefecturesObject =
                                responce.getJSONArray("prefecture");

                        for(int i=0; i<prefecturesObject.length(); ++i) {
                            prefectures.add(prefecturesObject.getString(i));
                        }


                        // UIスレッドでリストの更新を行う
                        Handler handler = new Handler(getMainLooper());
                        handler.post(new Runnable() {
                            @Override
                            public void run() {
                                ArrayAdapter arrayAdapter =
                                        new ArrayAdapter(MainActivity.this,
                                                R.layout.list_item,
                                                prefectures);

                                listView.setAdapter(arrayAdapter);
                            }
                        });
                    }catch (JSONException jsonEx) {
                        jsonEx.printStackTrace();
                    }
                } else {
                    throw new IOException();
                }
            }
        });
    }
}

完成したスクリーンショットです。

都道府県が取得出来ていますね。
以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です