Expense Trackerなどの名前の経費明細、経費節約アプリの作り方が、YouTubeなどで紹介されているが、簡単な経費明細アプリを作ってみた。経費明細を入力し、FirebaseのRealtime DBに保存し、リストで一覧表示するシンプルなアプリ。
このアプリは、時々反応が鈍い時があるが、再度データを読み込むと特に問題なくデータ取得、表示できるので、今は無視しても良いだろう。多分、タイミングが合わない時などにエラーが出ているのだと思われる。
実行画面:
検索したら、その項目だけの合計金額にリアルタイムで変更していけばいいのだが。。。多分無理かな。
スクリーンのデザイン:
左がメイン画面で費用の明細が表示される。
右は費用の内容をインプットし、データベース (Googleが提供するFirebase Realtime DB) に保存する画面。
「+」ボタンをタップすれば、内容入力画面に遷移。
「Done」ボタンをタップすれば、メイン画面に遷移。
![](https://blogimg.goo.ne.jp/user_image/38/dc/f568a8ae564789e69ae57b074a7a1e78.png)
ブロック・コード:
<メイン画面Screen1>
1. 「+」ボタンをタップすると、費用の内容を入力するInputScreenに遷移。
![](https://blogimg.goo.ne.jp/user_image/1f/44/a677368458b3c4a97c7989c025c03a59.png)
2. 「getDetail」(getButton)をタップした時の動作。変数を初期化した後、関数getTagListおよびgetDataを実行。
![](https://blogimg.goo.ne.jp/user_image/5d/fc/c731d411029a268daf36d1b21ae4eb89.png)
3. 関数resetVariablesの内容
![](https://blogimg.goo.ne.jp/user_image/4b/e7/612fac9a20e8381af92a5d5eee3c42b1.png)
4. 所定のURLに対しGETリクエストを行う。(shallow=trueとすれば、各データのキーでもあるtagの値のみを返してくれる)
![](https://blogimg.goo.ne.jp/user_image/0c/7a/58fdfe749a2285abbad634f1336ec2fe.png)
5. 返ってきたデータから、データの個数を取得し、データ自体はtagListに格納する。
![](https://blogimg.goo.ne.jp/user_image/15/91/c209f0544aad2150f048ae0d4196a250.png)
![](https://blogimg.goo.ne.jp/user_image/46/75/0dee601c75416a8f0eec9925e8f5eabd.png)
6. 所定のURLに対しGETリクエストを行いデータを取得。
![](https://blogimg.goo.ne.jp/user_image/70/c0/e6af4dc34a67f7846bfa1dc74ecae7e7.png)
7. 取得したデータを基に、各項目のデータのリストを作成する。関数makeDateList, makeItemList, makeTypeList, makeAmountListを実行し、最後にそれらを統合するmakeDataForListViewを実行。そして、ListViewにデータを表示。
![](https://blogimg.goo.ne.jp/user_image/40/bb/13c7276e85024ccc8f3ecb1477e88821.png)
![](https://blogimg.goo.ne.jp/user_image/6e/86/04b61fb75d7d107a601175f520d0a262.png)
8. 関数makeDateListの実行内容:
tagListをキーにしてデータを読み込み、さらにそれぞれの項目(この場合Date)をキーにして値を取得。(以下同じ考え方)
![](https://blogimg.goo.ne.jp/user_image/32/94/e19c4f281313410bfc525e13d69da504.png)
![](https://blogimg.goo.ne.jp/user_image/2f/cd/8c87096dc36ef6b6dce880b27758ee13.png)
9. 関数makeItemListの実行内容:
![](https://blogimg.goo.ne.jp/user_image/5f/8b/d558fcf46a87e24de14036c16e75555b.png)
![](https://blogimg.goo.ne.jp/user_image/1a/b9/4ad6c7322f7cbe1fb5120f3eeff546ba.png)
10. 関数makeTypeListの実行内容:
![](https://blogimg.goo.ne.jp/user_image/3f/aa/a5421d1ce7e85a39f52733ec02295eaa.png)
![](https://blogimg.goo.ne.jp/user_image/2f/aa/5f373bc198c78526d68632cd73061965.png)
11. 関数makeAmountListの実行内容:
コンマ付きのリストは表示用のamountListに、コンマなしの金額はbareAmountに格納し、順番に加算し合計金額を算出。加算する場合、コンマのような余計なもの(Text)があると計算できないため。
![](https://blogimg.goo.ne.jp/user_image/7c/75/4ca4fd1cef79bf6f5ab21724fe8bad6d.png)
![](https://blogimg.goo.ne.jp/user_image/31/73/84bb8ed650dd74a30013721dc199f1de.png)
12. 関数makeDataForListViewの実行内容:
![](https://blogimg.goo.ne.jp/user_image/10/84/13c8b3b4dd5244345658724d27d46553.png)
![](https://blogimg.goo.ne.jp/user_image/43/92/f7c19173a6828bc9df511179572b5774.png)
<サブ画面inputScreen>
1. 変数の設定:
itemlList は Item ListPicker で表示するアイテムリスト。
typeList は Tyoe ListPicker で表示する費用のタイプリスト
![](https://blogimg.goo.ne.jp/user_image/5c/04/eccd23fda03878afd08466b08c31f8f4.png)
2. メイン画面に戻るボタン(Done) の設定
![](https://blogimg.goo.ne.jp/user_image/59/a6/f8b27c14aaebdcd380884c06aadbef78.png)
3. inputScreenの初期化。itemListPicker及びtypeListPickerの表示項目を設定。
![](https://blogimg.goo.ne.jp/user_image/57/fe/63b854c5bbe2e6b7569a84117b49be66.png)
4. DatePickerで日付を選択した後の動作設定。selectDateLabelに表示するとともに変数dateに値を格納。
![](https://blogimg.goo.ne.jp/user_image/47/fe/99ac221f0dadb49c0749fffffe10b012.png)
5. ItemListPickerでアイテムを選択した後の動作設定。itemLabel に表示するとともに変数itemに値を格納。
![](https://blogimg.goo.ne.jp/user_image/62/1e/ded6b1a6c803d6250b13743758867154.png)
6. TyoeListPickerで費用の種類を選択した後の動作を同様に設定。
![](https://blogimg.goo.ne.jp/user_image/0b/44/36f744758402369b8f45172acad30066.png)
7. 変数とLabelをリセットする関数resetVariablesAndLabelsを設定。
![](https://blogimg.goo.ne.jp/user_image/76/0c/bc830c4406999e5d5175e4ecb9f5e465.png)
8. 所定のURLに費用の内容(日付、費用項目、費用の種類、金額)をPostする。そして、キーボードを非表示にする。
![](https://blogimg.goo.ne.jp/user_image/7e/e2/ab7a15091ed024cfa609de15df2885d9.png)
9. Postが成功したら、resetVariablesAndLabelsを実行し、すべて初期化する。
![](https://blogimg.goo.ne.jp/user_image/08/c3/b349ee2957d809ee0d71f841e47a3a23.png)
簡単にできるかな、と思ったが、色々なところでかなり手こずった。
また、なかなかグラフを使用する機会がないので、もし可能なら費用の推移などをグラフ表示できればいいのだが。。。