SQLの窓 イラストAC フリー素材

2017年07月01日

Android Studio : LiveDoor のお天気情報をリストビューに表示する手順

手順1

AndroidManifest.xml に、以下を追加する

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

手順2

build.gradle(Module) に、OkhttpGoogle Gson の記述を追加する
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.squareup.okhttp3:okhttp:3.8.1'
    compile 'com.google.code.gson:gson:2.8.1'

}


activity_main.xml に ListView をセット
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</LinearLayout>


JSON データをデシリアイズする為のクラスを作成
public class Weather {

	WebData[] pinpointLocations;

}
public class WebData {

	String link;
	String name;

	@Override
	public String toString() {
		return name;
	}
}

インターネットアクセス用のクラス

HttpAccess クラスを追加
import android.os.AsyncTask;

import java.io.IOException;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class HttpAccess {

	private OkHttpClient okHttpClient;
	private String url;

	public interface OnAsyncTaskListener {
		abstract public void onAsyncTaskListener(String s);
	}

	public HttpAccess(String url) {
		this.okHttpClient = new OkHttpClient();
		this.url = url;
	}

	public void sendGet(final OnAsyncTaskListener listener ) {

		new AsyncTask<Void,Void,String>(){
			@Override
			protected String doInBackground(Void... params) {
				String result = "[\"error\"]";

				Request.Builder builder = new Request.Builder();
				builder.url(HttpAccess.this.url);
				Request request = builder.build();

				Response response = null;
				try {
					response = HttpAccess.this.okHttpClient.newCall(request).execute();
					result = response.body().string();
				}
				catch (IOException e) {
					e.printStackTrace();
				}

				return result;
			}

			// UI スレッド処理
			@Override
			protected void onPostExecute(String s) {
				super.onPostExecute(s);

				listener.onAsyncTaskListener(s);

			}
		}.execute();

	}

}


private 変数を三つ作成
private ListView listView;
private ArrayAdapter<WebData> arrayAdapter;
private HttpAccess httpAccess;


ListView と ArrayAdapter のインスタンスを作成

以降 onCreate にて。
listView = (ListView) MainActivity.this.findViewById(R.id.listView);
arrayAdapter = new ArrayAdapter<WebData>(MainActivity.this,android.R.layout.simple_list_item_1);


ListView に ArrayAdapter をセット

listView.setAdapter(arrayAdapter);

API を呼び出して結果をリストビューにセット
new HttpAccess("http://weather.livedoor.com/forecast/webservice/json/v1?city=270000")
	.sendGet(new HttpAccess.OnAsyncTaskListener() {
		@Override
		public void onAsyncTaskListener(String s) {

			Gson gson = new Gson();
			Weather weather = gson.fromJson(s, Weather.class);

			arrayAdapter.clear();
			arrayAdapter.addAll(weather.pinpointLocations);

		}
	});


さらに Intent で第二画面

Android Studio : LiveDoor のお天気情報をリストビューに表示した後、第二画面で name を変更して第一画面で再表示する手順



タグ:android java
【Androidの最新記事】
posted by at 2017-07-01 23:08 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Custom Search
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX