郵便番号検索
郵便番号を検索するアプリを作ります
標準のApp Inventor 2日本語版にSQLiteエクステンション、Zipエクステンション、Fileエクステンションを追加して使用しています。また、簡単なSQL言語を使用しています。このアプリはandroid 11以降では"The permission READ_EXTERNAL_STORAGE has been denied"エラーが出て動作しません。
ソースコードを見ながらこのチュートリアルを読んだ方がわかりやすいと思います。ページの最後にあるダウンロードセクションからソースコードをダウンロードしてからApp Inventorを開き、[ プロジェクト ]をクリックして[コンピュータからプロジェクト(.aia)をインポートします]を選択し、ソースコードを選択してインポートしてください。
プログラムの構造(流れ)
SQLite自体はAndroidに標準装備です。
- あらかじめSQLiteの全国郵便番号データベースファイル(約12万件)を作成しておき、このファイルのzip圧縮ファイルをアセットとしてアプリに同封します。App Inventorではアセットとしてアップロードできるファイルのサイズは5MB程度が上限なので、圧縮しています。全国郵便番号データベースファイルの圧縮前ファイルサイズは8.5MB、圧縮後ファイルサイズは2.4MBです。万が一、アセットにファイルが無い時あるいは圧縮ファイルサイズが5MBを超えた時に備え、指定サーバーからzip圧縮ファイルをダウンロードして使用する機能も持っています。
- zip圧縮データベースファイルを解凍後、SQLiteにインポートし、データベースから都道府県のリストを作成してスピナーで表示します。
- 都道府県が選択されたら指定都道府県内の市町村リストを作成してスピナーで表示します。
- 市町村が選択されたら指定市町村内の町域リストを作成してスピナーで表示します。
- 町域が選択されたら定都道府県内指定市町村内指定町域の郵便番号を表示します。
郵便番号データベースファイルの作成(App Inventorは使いません)
https://www.post.japanpost.jp/zipcode/dl/roman-zip.html より全国一括のzip圧縮データファイルをダウンロードします。解凍後、表計算ソフトでローマ字列を削除し、代わりに通し番号の列を追加します。また文字コードがShift JISなので、UTF-8に変換してからcsvで保存します。
SQLiteデータベースのテーブル構造を以下のように定義し、SQLite GUI管理ツール(たとえばDB Browser for SQLite)を使ってテーブルを作成し、csvファイルをインポートしてデータベースを作成します。ここではjapanzip.sqliteという名前でデータベースを作成し、japanzip.zipというファイルに圧縮しました。japanzip.zipはここからダウンロードしてください。
CREATE TABLE "japanzip" (
"id" INTEGER NOT NULL UNIQUE,
"zip" TEXT,
"prefs" TEXT,
"city" INTEGER,
"street" TEXT,
PRIMARY KEY("id" AUTOINCREMENT)
);
プロジェクトを作成
[プロジェクト]メニューから[新規プロジェクトを始める]を選択し、”ZipJapan”と名前を付けます。
エクテンションの追加
- AppInventor extension for SQLiteからDownload AIXをクリックしてローカルパソコンにダウンロードし、org.bennedum.SQLite.aixをエクステンションパレットからエクステンションインポートをクリックしてインポートします
- https://puravidaapps.com/zip.php からTaifunZip extension (aix file)をダウンロードし、com.puravidaapps.TaifunZip.aixをエクステンションパレットからエクステンションインポートをクリックしてインポートします。
- https://puravidaapps.com/file.php からTaifunFile extension (aix file)をダウンロードし、com.puravidaapps.TaifunFile.aixをエクステンションパレットからエクステンションインポートをクリックしてインポートします。
デザイン編集
垂直配置レイアウトをビューアーにドラッグアンドドロップし、垂直配置1のプロパティーのうち水平に整列するは"中央揃え"、横幅は"親要素に合わせる"にします。その中に2個のラベル(タイトル、空白)、スピナー(選択ドロップダウン)、1個のラベル(初期化ラベル)、1個のボタン(初期化ボタン)、1個のラベル(住所ラベル)、1個のテキストボックス(郵便番号)、1個のボタン(リセット)を上から順番にドラッグアンドドロップします。それぞれのコンポーネントの名前はカッコ内のものにしてください。
それぞれのコンポーネントのプロパティーですが、"タイトル"の背景の色は"カスタム"で#4285f4ffに、フォントサイズは32、テキストは"郵便番号検索"、テキストカラーは"白"にします。"空白"のテキストは空白にします。"選択ドロップダウン"の目に見えるはチェックを外します。"初期化ラベル"のフォントサイズは10、テキストは"郵便番号データベースを初期化します。よろしければ下の初期化ボタンをクリックしてください。"、目に見えるはチェックを外します。"初期化ボタン"のテキストは"初期化"、目に見えるはチェックを外します。"住所ラベル"のテキストは"初期化中"、目に見えるはチェックを外します。"郵便番号"は目に見えるのチェックを外します。"リセット"の背景の色は"カスタム"で#4285f4ffに、太字フォントをチェック、テキストは"リセット"、テキストカラーは"白"にします。
見えないコンポーネント類としてエクテンションに追加したSQLite、 TaifunZip,、TaifunFileと接続パレットにあるウェブ、ストレージパレットにあるファイルをドラッグアンドドロップします。最後にファイルをアップロードをクリックしてjapanzip.zipをアップロードします。ここまでで下図のようになります。