Androidアプリ開発エンジニアのゆーちゃまさんです^^
当サイト「ドロイドブログ」を運営しています。
Webアプリ開発3年ほど、Androidアプリ開発を10年ほどやってます。
assetsフォルダ内のファイルを読み込むことが出来るのですが、応用がきいて便利。
実際の開発事例と合わせて解説!
結論
実装も簡単なのでお勧めです。
知っているだけで、開発方法の選択肢が増えます^^
使うか使わないかは別として、選択肢を増やすことは開発する上でとても大事!
この機会に是非覚えておきましょう。
実際の開発事例

実際の開発事例をお話しますね^^
- 祝日のリストを配置して利用
- ダミーjsonを配置して利用
1.祝日リストを配置して利用
僕が現在開発しているアプリでは、カレンダーを表示する機能があります。
カレンダーを表示するとなると、やはり祝日は赤字で表示するという要件に。
祝日リストを取得する必要がありますが、APIが無いのでassetsフォルダに祝日リストを配置。
カレンダー画面で読み込んで、一致する日を祝日として赤で表示する。

yyyyMMdd,yyyyMMdd,…
の様にcsv形式で保存しています
後ほどコードと共に紹介しますね^^
2.ダミーjsonを配置して利用
ネイティブアプリは、webApiを実行してその結果を利用します。
例えば…何かのお店検索Apiを実行して、そのレスポンスを一覧に表示。
という流れですね。
そのレスポンスは jsonであることがほとんど。
webApiはサーバサイドのエンジニアが実装して、利用できるようになったらアプリエンジニアが使います。
ただ、同時に開発がスタートするとAPIはすぐに出来ないので、出来るまで待たなければならない。
そういった場合、APIのレスポンスで返ってくる仮のjsonをassets配下に設置。
APIを叩くロジック部に一旦、仮のjsonをassetsからロードしてApi実行結果として返すようにする。

APIが動くようになったら
差し替えるだけなので簡単^^
APIが出来てからじゃないと開発できない!
というエンジニアが居ますが、それでは開発時間がかかってもったいない。。
asettsフォルダロードを知っていれば、「じゃあ、仮データasettsにおいてやっておこう!」
となるわけですね^^
assetesファイル配置・コード解説

まずはassets配下にファイルを置きます。
今回は先ほどお話した、祝日ファイルにしますね^^

src -> main -> assets に、「holiday」というファイルを配置。
holidayの中身はカンマ区切りで、祝日をyyyy/MM/ddで記入してあるだけですね^^
1 2 | 2021/01/01,2021/01/11,2021/02/11,2021/02/23,2021/03/20,2021/04/29,2021/05/03,2021/05/04,2021/05/05,2021/07/19,2021/08/11,2021/09/20,2021/09/23,2021/10/11,2021/11/03,2021/11/23, 2022/01/01,2022/01/10,2022/02/11,2022/02/23,2022/03/21,2022/04/29,2022/05/03,2022/05/04,2022/05/05,2022/07/18,2022/08/11,2022/09/19,2022/09/23,2022/10/10,2022/11/03,2022/11/23, |

このholidayを読み込んで
単純に画面に表示してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | publicstaticStringloadAsset(finalContextcontext,finalStringfileName){ StringBuilderresult=newStringBuilder(); InputStreaminputStream=null; BufferedReaderbufferedReader=null; try{ inputStream=context.getAssets().open(fileName); bufferedReader=newBufferedReader(newInputStreamReader(inputStream)); Stringline; while((line=bufferedReader.readLine())!=null){ // 一行ずつ読み込み // 改行を付けたい場合は、 line + "n" result.append(line); } }catch(Exceptione){ LogUtil.e(e); }finally{ try{ if(inputStream!=null){ inputStream.close(); } if(bufferedReader!=null){ bufferedReader.close(); } }catch(Exceptione){ LogUtil.e(e); } } returnresult.toString(); } |
まずは、ファイルをロードするロジックです。
このコードはログの部分以外はそのまま利用できます^^
- 第1引数:Context
- 第2引数:実際のファイル名

いつでも使えるように、
ユーティリティークラスなどに
作成しておきましょう^^
次に画面のレイアウトファイルです。
1 2 3 4 5 6 7 8 9 10 11 12 | <?xmlversion="1.0"encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout> |

画面中央にEditTextがあるだけの画面です^^
次にActivityです。
1 2 3 4 5 6 7 | @Override protectedvoidonCreate(@NullableBundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.test_activity); finalEditTexteditText=findViewById(R.id.editText); editText.setText(Util.loadAsset(this,"holiday")); |

loadAsset()でholidayを読み込んだ結果をEditTextにセット^^
サンプル実行結果


ちゃんと読み込んだ内容が
表示されてますね!!
簡単^^
まとめ
開発するときに、実装する手段として知っていると知らないとでは天と地ほどの差がありますよ。
利用する・しないはその時々にあった開発手段を選択すれば良い。
方法として知っている事が大事ですね^^

開発時に、
あ!そういえばassetsのファイルロードする方法あったなーと思い出してもらえればうれいしいです^^
こちらの記事もどうぞ^^
⇒ ⇒ ⇒ 【現役エンジニア】プログラマの業務の流れ、開発以外で何やってるの?現役エンジニアがお答えします!
⇒ ⇒ ⇒ 【プログラム開発業界用語】レビュー・リスケなどエンジニアになる前に知りたかった6つのこと解説
⇒ ⇒ ⇒ 【Android勉強】SharedPreferencesの便利な使用方法を教えます
⇒ ⇒ ⇒ 【java 配列の基礎】配列はこれだけ覚えておけばOK!徹底解説。
⇒ ⇒ ⇒ 【java map】Mapの使い方、使いどころを実例で解説
コメント