- likes to write code in type-safe and expressive languages.
blackbracken / neji-android Goto Github PK
View Code? Open in Web Editor NEW:gear: A client app to manage your items using QR code for Android
:gear: A client app to manage your items using QR code for Android
わかりづらいので
検索結果の画面を使いまわすのではなく, アイテム一覧を表示するための画面を追加する.
加えて, アイテムの追加はこの画面からのみ行えるようにして, ボックスとリージョンの指定は除去する.
signInWithEmailAndPassword
を呼び出す時, 通信に失敗する場合がある.
タイムアウトしないので, 呼び出しからコールバックが呼ばれたり例外が吐かれない.
再現手段が不明なので要検証.
分かりづらいしもっと明確に語彙を分けるべき
RecyclerView
上で項目を左右にスワイプするとダイアログを出して削除できるように.
重複チェックや空欄チェックが欠落している部分がある
まだしてない
「毎回ロード」か「メモリ+ストレージキャッシング」の二択しかない、SwipeRefreshLayout
被せてリロード可能にし最適化する
モデルの中の一部の値のみ(e.g. id)を要求するべきなのにモデルそのものを要求している、など
俺があと2人欲しい
主にFirebaseRepository
の実装内でのsuspendCoroutine
の依存を剥がしたい
左右には問題ないが, 下に行けばいくほど誤差が大きくなっている. 要検証.
N+1問題も解決する. 内容物の削除時にコレクション側に変更を加える必要があるので注意すること.
E/StorageException: StorageException has occurred.
Object does not exist at location.
Code: -13010 HttpResult: 404
E/StorageException: Could not open resulting stream.
java.io.IOException: Could not open resulting stream.
at com.google.firebase.storage.StreamDownloadTask.createDownloadStream(StreamDownloadTask.java:145)
at com.google.firebase.storage.StreamDownloadTask.access$000(StreamDownloadTask.java:36)
at com.google.firebase.storage.StreamDownloadTask$1.call(StreamDownloadTask.java:167)
at com.google.firebase.storage.StreamDownloadTask$1.call(StreamDownloadTask.java:164)
at com.google.firebase.storage.StreamDownloadTask$StreamProgressWrapper.ensureStream(StreamDownloadTask.java:325)
at com.google.firebase.storage.StreamDownloadTask$StreamProgressWrapper.access$100(StreamDownloadTask.java:262)
at com.google.firebase.storage.StreamDownloadTask.run(StreamDownloadTask.java:175)
at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
StorageException has occurred.
Object does not exist at location.
Code: -13010 HttpResult: 404
E/StorageException: Could not open resulting stream.
java.io.IOException: Could not open resulting stream.
at com.google.firebase.storage.StreamDownloadTask.createDownloadStream(StreamDownloadTask.java:145)
at com.google.firebase.storage.StreamDownloadTask.access$000(StreamDownloadTask.java:36)
at com.google.firebase.storage.StreamDownloadTask$1.call(StreamDownloadTask.java:167)
at com.google.firebase.storage.StreamDownloadTask$1.call(StreamDownloadTask.java:164)
at com.google.firebase.storage.StreamDownloadTask$StreamProgressWrapper.ensureStream(StreamDownloadTask.java:325)
at com.google.firebase.storage.StreamDownloadTask$StreamProgressWrapper.access$100(StreamDownloadTask.java:262)
at com.google.firebase.storage.StreamDownloadTask.run(StreamDownloadTask.java:175)
at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
E/StorageException: StorageException has occurred.
Object does not exist at location.
Code: -13010 HttpResult: 404
Could not open resulting stream.
java.io.IOException: Could not open resulting stream.
at com.google.firebase.storage.StreamDownloadTask.createDownloadStream(StreamDownloadTask.java:145)
at com.google.firebase.storage.StreamDownloadTask.access$000(StreamDownloadTask.java:36)
at com.google.firebase.storage.StreamDownloadTask$1.call(StreamDownloadTask.java:167)
at com.google.firebase.storage.StreamDownloadTask$1.call(StreamDownloadTask.java:164)
at com.google.firebase.storage.StreamDownloadTask$StreamProgressWrapper.ensureStream(StreamDownloadTask.java:325)
at com.google.firebase.storage.StreamDownloadTask$StreamProgressWrapper.access$100(StreamDownloadTask.java:262)
at com.google.firebase.storage.StreamDownloadTask.run(StreamDownloadTask.java:175)
at com.google.firebase.storage.StorageTask.lambda$getRunnable$7(StorageTask.java:1072)
at com.google.firebase.storage.StorageTask$$Lambda$12.run(Unknown Source:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
今はリポジトリにして切り分けているが, 分離するメリットよりデメリットが大きいように思う.
アプリの仕様レベルでFirebaseに依存しているので差し替えるタイミングが無く, テストにはFirebase Local Emulator Suiteを用いれば良い気がする(ユニットテストだと目標を達成できない可能性, 愚直にモックを作るのも吝かではない).
FireStore上でのパス変更 imageUrl
-> imagePath
QRのテキストはunique-keyとは別枠で用意したほうが良いのでは
ref. AddItemViewModel
ViewModel上でバリデーションを行うこと, ついでにテストも書きたい
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.