コピーして使いやすいように、ソースコードにパッケージに依存する記述が無いので注意して下さい。 (画面は、.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-mysql/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の最新記事】
- 別に納品するわけでは無いので、Android の ListView のカスタマイズなんてこれで十分でしょ / TestArrayAdapter バージョン2
- Java : Class 構造より、update 文を作成する
- ViewSwitcher を使用した2画面アプリ (5) : SQLiteデータを更新する
- ViewSwitcher を使用した2画面アプリ (4) : SQLiteデータをインポートしてリストビューに表示する
- Android Studio にインポートして使用する SQLite データベースを MDB より作成する VBScript
- ViewSwitcher を使用した2画面アプリ (3) : 画面部分の作成と画面切り替えテスト『画面をコントロールする Helper クラスの作成』
- ViewSwitcher を使用した2画面アプリ (2) : 画面部分の作成と画面切り替えテスト『画面の作成』
- ViewSwitcher を使用した2画面アプリ (1) : 画面部分の作成と画面切り替えテスト『メニューの作成』
- OkHttp を使用した HttpAccess クラスで Web 上の 画像をダウンロードして表示するテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の PHP アプリに対してファイルをアップロードするテンプレート
- OkHttp を使用した HttpAccess クラスで Web 上の掲示板に投稿(POST)するテンプレート
- Okhttp を使用した、GET、POST、ファイルアップロードを楽に実装できる HttpAccess クラス
- Android の assets フォルダーに保存した 400x320 の画像ファイルの扱い
- Android の drawable フォルダーに保存した 400x320 の画像ファイルの6種類の扱いと Density
- Android での保存用テキストデータの扱いを okio で簡素化する
- Android 6.0 : テストの為の Runtime Permission の対応を自動化するテンプレート
- Android Studio : Runtime Permission 等の裏方作業を MainActivity にさせて、本来の処理は継承したサブクラスで行う( カメラを呼び出して画像を保存させ、I..
- Android 6.0 エミュレータで 複数の Runtime Permission の対応を簡潔に吸収するクラス( CheckMyPermission )
- Android 6.0 の Runtime Permission に対応する前に、AndroidManifest.xml に権限の記述の必要無いプライベートな書き込みで情報を収集する
- Android Studio : エミュレータで Notification(通知)のテスト