私は firestore および Android アプリ作成初心者です。
初心者でも firestore をバックエンドにした Android アプリを作るのはかなりハードルが低いということで、今ちょこっと取り組んでいるところです。
そこで、主題の件ですが、ハマったことを備忘録として残しておきます。
前提
開発環境
- Windows10 上で、Android Studio を使用
- 動作確認は仮想デバイスを使用
- バックエンドには Firebase を使って、データベースに firestore を使用するつもり
困ったこと
ネット上に溢れている、なんてことない firestore への書き込み処理を実装して、仮想デバイスを使って動作確認をしてみました。
・・・書き込めませんでした。
そもそもなんか書き込みができているっぽい挙動をする(エラーを返さない?)けど、Firebase コンソールで firestore の中身を確認しても、何も書かれていませんでした。
原因と解決方法
仮想デバイスがインターネットにつながっていないことが原因でした。
以下、解決手段です。
1.前提
仮想デバイス関係ないですが、アプリケーションをインターネットに接続できるようにするためには、AndroidManifest.xml
に以下を追記する必要があります。
<uses-permission android:name="android.permission.INTERNET" />
ちなみに今回はこれはちゃんとやっていました。
2.仮想デバイスの確認
ここが問題です。
よくよく仮想デバイスを見てみると、以下のようになっていました。
ビックリマーク「!」がついています。
ネットワークにつながっていないです・・・
ここにたどり着くまでに相当ハマりました。
まさか、ネットワークにつながってないとは・・・
というか、それなら実行時に例外とか投げて欲しいんですけど。java の言語仕様的にこういうもの?それとも Firebase のライブラリが不親切?
ツラかったです・・・
ということで、ネットワークへの接続方法ですが、これもネットに沢山溢れています。
ただし、仮想デバイス側のネットワーク設定とかは解決策の決定版的なものがないっぽく、解決する場合もあるし解決しない場合もあるし・・という感じでした。
てことで、てっとり早く解決する方法は、どうやら仮想デバイスのAPIレベルを25以上にする(もしかしたら26以上?)というのが間違いないようです。( https://code-examples.net/ja/q/782ece )
APIレベルを25以上にすると、仮想デバイス内で自動的に wifi に接続してくれるらしいです。
(wifi 環境下でないとダメなのかもしれませんが・・・)
私は無駄に下位互換を意識してAPIレベル24で仮想デバイスを使っていたのですが、それがアダとなりました。
改めて、APIレベル26の仮想デバイスを用意して起動してみると、以下のように確かに wifi につながっていました。(なんならモバイルネットワークもつながっているっポイですが・・・謎です。)
この環境下で改めて firestore への書き込みを実行してみると、無事書き込みが成功しました。
コメント