2020年2月16日 星期日

App | 來個口罩地圖


經過了多天的努力,終於完成了初版!沒想到一個簡單的東西,我還是花了不少時間QQ



首先是 Google map 在 release 後跑不出來的問題,之前做另一個 App 順順的,這次忽然哪個環節沒設定到結果搞了很久...,真的蠢。還是要乖乖做一下紀錄,這種不常用到的設定真的容易忘。

多數的時間在玩 cluster 的功能,網路上一堆 code 都不能用,寫出不能 run 的 code 你很開心嗎?!

主要因為我是直接去抓公開資料的檔案,所以一次下來都一大包,我自己先做存了一份有轉換經緯度的資料在assets(經緯度是用 Geocoder 吃地址資料轉出來的,跟 Google map 上的 poi 有誤差,可是沒錢用 place api),第一次進入會先把資料寫到 room,然後再去更新口罩數量與時間,我還不知道為什麼手機去要公開資料的速度這麼慢,而一次抓回來就是 6000 多筆資料,每一筆都要更新room的資料,光資料回來就要一些時間,更新 6000 多筆資料又要時間,更新的資料裡可能還有 assets 裡沒有包含的藥局資料,又要另外去用 Geocoder 轉經緯度,也是耗時,所以光要資料這段就要等很久,初次打開時從 assets 寫到 room 也要花不少時間,這樣看起來實用度根本太低了XD,沒有一個好的資料來源真是傷腦筋。

這邊原本是用一般的方法在 repo 裡寫一個請求去要資料,但是因為回來時間實在很慢,user 如果 home 鍵移除 App,要回來的資料來不及存到 db 就浪費了,所以就改用workManager,就算 app 被 home 鍵移除雖然當下這個 work 會先取消,但過不久後會自己起一個 work,確保有跑完,只是如果這時候 user 開了 App 再 home 鍵移除,又會重複這個動作,我覺得這是一個 bug...

因為這樣的資料來源,一開始是把 6000 多筆資料都撒到地圖上,結果非常卡XD,尤其將地圖縮小到整個台灣的時候,一次秀出全部的點,真的是密集恐懼,或是在台北市中心放大地圖也是非常多點,所以著手使用 cluster。

cluster 一用更卡,即使把動畫關掉 view 還是有時間差,因為同時太多點在 cluster 了,所以只要在點很多的地方縮縮放放就會累格到不行,完全沒辦法使用。

最後選擇的方法就是利用 latLngBounds 去 filter 藥局的位置,只有經緯度在可見區域的點才會秀出來並 cluster ,完全解決了卡頓的問題,寫程式最開心的地方莫過於此!拍拍手!啪啪啪!

不過這個方法是在 Google map 的 issue 裡看到別人討論的,有人跟你講思路就很好了,下面一堆人在要 code 是怎樣!不會自己 try try 看嗎?

然後其中有一個很奇怪的問題,room 在自己 build 的時候都可以正常 work,但如果 release 後就會出現 code 1299 SQLITE_CONSTRAINT_NOTNULL[1299] 這個問題,到底為什麼會有這樣的差異,debug 跟 release 差在哪裡?!

最後一題是 proguard,開了 proguard 後,marker 出不來,要測的話就要一直上 release 版來測,實在太累了,索性就把 proguard 給關了,一切都正常了!感覺很不嚴謹的一個小作品XD。

App | 來個口罩地圖



沒有留言:

張貼留言