SQLの窓

2017年08月17日


OkHttp を使用した HttpAccess クラスで Web 上のデータを取得(GET)して ListView を表示するテンプレート



コピーして使いやすいように、ソースコードにパッケージに依存する記述が無いので注意して下さい。
(画面は、.MainActivity なのでそのまま使用可能です)

ListView は、Android で定義済みの android.R.layout.simple_list_item_1 を使用しています。それに伴い、WebData クラスでは、toString を Override して 氏名が表示されるようにしています。

JSON データは、PHP でも使用し、コードの見通しを良くする為、プロバティは日本語(UTF8)で記述されています。
        {
            "社員コード": "0001",
            "氏名": "浦岡 友也",
            "フリガナ": "ウラオカ トモヤ",
            "所属": "0003",
            "性別": "0",
            "作成日": "2005-09-12 00:00:00",
            "更新日": "2005-11-28 00:00:00",
            "給与": "270000",
            "手当": "9000",
            "管理者": null,
            "生年月日": "2010-01-01",
            "削除区分": null,
            "所属名": "営業部第三"
        }
▼ HttpAccess パッケージのダウンロード


( 解凍して、main\java フォルダの中に コピーして下さい )
※ OkHttp より 最新の Gradle の記述を取得して build.gradle の dependencies の最後に貼り付けて下さい
例) compile 'com.squareup.okhttp3:okhttp:3.8.1'

JSON データへのリンク
※ fld_search=氏名の一部 で条件を指定できます

MainActivity
public class MainActivity extends AppCompatActivity {

	// *******************************
	// データ定義
	// *******************************
	private String url = "https://lightbox.sakura.ne.jp/demo/template/lightbox/syain-req-jquery/app-get.php";

	// *******************************
	// 変数定義
	// *******************************
	private ArrayAdapter<WebData> arrayAdapter;
	private ListView listView;
	private HttpAccess httpAccess;

	// *******************************
	// 初期処理
	// *******************************
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// リストビュー
		listView = (ListView) MainActivity.this.findViewById(R.id.listView);
		// リストビューの行をタップした時の処理
		listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

				// アダプターを取得
				ArrayAdapter<WebData> arrayAdapter = (ArrayAdapter<WebData>)parent.getAdapter();

				// 行データを取得
				WebData webData;
				webData = arrayAdapter.getItem(position);

				Log.i("lightbox", String.format("社員コード : %s",webData.社員コード));
				Log.i("lightbox", webData.氏名);
				Log.i("lightbox", webData.フリガナ);
				Log.i("lightbox", String.format("所属 : %s %s",webData.所属,webData.所属名));
				Log.i("lightbox", String.format("性別 : %s", webData.性別.equals("0") ? "男性" : "女性" ));
				NumberFormat numberFormat = NumberFormat.getNumberInstance();
				Log.i("lightbox", String.format("給与 : %s", numberFormat.format(webData.給与)));
				if ( webData.手当 == 0 ) {
					Log.i("lightbox", "手当てはありません");
				}
				else {
					Log.i("lightbox", String.format("手当 : %s", numberFormat.format(webData.手当)));
				}
				if ( webData.管理者 != null ) {
					Log.i("lightbox", String.format("管理者コード : %s",webData.管理者));
				}
				else {
					Log.i("lightbox", "管理者です");
				}
				if ( webData.生年月日 != null ) {
					Log.i("lightbox", String.format("生年月日 : %s",webData.生年月日));
				}
				else {
					Log.i("lightbox", "生年月日は登録されていません");
				}

			}
		});


		// データが入るオブジェクト
		arrayAdapter = new ArrayAdapter<WebData>(MainActivity.this, android.R.layout.simple_list_item_1);
		// 初期化
		arrayAdapter.clear();

		// リストビューにデータが入るオブジェクトをセット
		listView.setAdapter(arrayAdapter);

		// WEB アクセス用オブジェクト
		httpAccess = new HttpAccess(url + "?fld_search=村");

	}

	// *******************************
	// メニューの処理
	// *******************************
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.menu_main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();

		// *******************************
		// 全て表示
		// *******************************
		if (id == R.id.action_1) {

			httpAccess.setUrl(url);
			httpAccess.sendGet(new HttpAccess.OnAsyncTaskListener() {
				@Override
				public void onAsyncTaskListener(String s) {

					// Gson インスタンス
					Gson gson = new Gson();

					// Gson によるデシリアライズ
					DataList dataList = gson.fromJson(s,DataList.class);

					// dataList.row が WebData の配列
					for( WebData rowData : dataList.row) {
						Log.i("lightbox",rowData.氏名);
					}

					// クリア
					arrayAdapter.clear();
					// データセット
					arrayAdapter.addAll(dataList.row);

				}
			});
			return true;

		}

		// *******************************
		// 一部表示
		// *******************************
		if (id == R.id.action_2) {

			httpAccess.setUrl(url + "?fld_search=村");
			httpAccess.sendGet(new HttpAccess.OnAsyncTaskListener() {
				@Override
				public void onAsyncTaskListener(String s) {

					// Gson インスタンス
					Gson gson = new Gson();

					// Gson によるデシリアライズ
					DataList dataList = gson.fromJson(s,DataList.class);

					// dataList.row が WebData の配列
					for( WebData rowData : dataList.row) {
						Log.i("lightbox",rowData.氏名);
					}

					// クリア
					arrayAdapter.clear();
					// データセット
					arrayAdapter.addAll(dataList.row);

				}
			});
			return true;

		}


		return super.onOptionsItemSelected(item);
	}


}


activity_main.xml
<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

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

</LinearLayout>


menu_main.xml
<menu 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"
    tools:context=".MainActivity">

    <item
        android:id="@+id/action_1"
        android:orderInCategory="100"
        android:title="全て表示"
        app:showAsAction="never" />

    <item
        android:id="@+id/action_2"
        android:orderInCategory="100"
        android:title="一部表示"
        app:showAsAction="never" />

</menu>


DataList.java
public class DataList {

	WebData[] row;

}


WebData.java
public class WebData {

	String 社員コード;
	String 氏名;
	String フリガナ;
	String 所属;
	String 性別;
	int 給与;
	int 手当;
	String 管理者;
	String 生年月日;
	String 所属名;

	@Override
	public String toString() {
		return 氏名;
	}
}


build.gradle
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    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.google.code.gson:gson:2.8.1'
    compile 'com.squareup.okhttp3:okhttp:3.8.1'
}






【2017 Android Studioの最新記事】
posted by lightbox at 2017-08-17 19:10 | Comment(0) | 2017 Android Studio | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり