iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Kotlin

喝咖啡要30天?一起用 Kotlin 打造尋找好喝咖啡的 App系列 第 29

Day29 在 Google 地圖上顯示全台咖啡廳資訊 - 6 顯示我的位置附近的咖啡廳(下)

  • 分享至 

  • xImage
  •  

FindYourCoffee 專案的需求 :

  • [x] 點擊地圖標記顯示商家資訊
  • [x] 顯示我的位置
  • [x] 在地圖上顯示咖啡廳標記
  • [x] 點擊地圖標記顯示咖啡廳資訊
  • [ ] 顯示我的位置附近的咖啡廳資訊
  • [ ] 加入篩選功能

昨天已經將 APP 的初始定位點是我的位置,今天試著顯示附近的咖啡廳資料。

思考

先想想該如何從當前的經緯度得知目前的所在城市。

  • 從經緯度取得城市
  • call api 取得當前城市的咖啡廳資訊
  • 更新畫面

從經緯度取得當前城市

爬了一下,發現可以使用 Geocoder 解析地理編碼,真是個酷東西 :

/**
 * 取得當前城市
 */
private fun getCityFromCoordinates(context: Context, latitude: Double, longitude: Double): String? {
    val geocoder = Geocoder(context, Locale.getDefault())
    var area: String? = null

    try {
        val addresses = geocoder.getFromLocation(latitude, longitude, 1);
        if (addresses?.isNotEmpty() == true) {

            // 取得城市名稱
            area = getFirstWord(addresses[0].adminArea)
        }
    }
    catch (e: IOException) {
        e.printStackTrace()
    }

    return area
}

接著將取得的城市名稱切割一下 :

/**
 * 切割城市字串
 * 例: 原先會回傳 "Taipei city",只取得 "Taipei"
 */
private fun getFirstWord(input: String): String {

    val words = input.split("\\s+".toRegex())
    return if (words.isNotEmpty()) words[0] else ""
}

完成任務一 !

取得當前城市的咖啡廳資訊

將拿到的城市字串丟給 loadCafes() :

// 取得咖啡廳資料
viewModel.loadCafes(city)

完整的 loadCafes() :

fun loadCafes(city: String?) {
    viewModelScope.launch(Dispatchers.Main) {
        try {
            // 發起非同步請求取得咖啡廳資料
            val deferredCoffeeShops = repository.getCoffeeShopsAsync(city)

            // 等待非同步執行結果
            val coffeeShops = deferredCoffeeShops.await()

            // 設定結果
            _cafes.postValue(coffeeShops)
        } 
				catch (e: CoffeeShopsRefreshError) {

            _cafes.postValue(mutableListOf())
        }
    }
}

差不多了!! 試試看

執行結果

這樣就會在打開 APP 後,移動到當前位置,並顯示附近的咖啡廳資訊拉!

因為背景好花,就改了自定義視窗的背景色

d29_1.png

但還有一些架構的地方要調整,明天再來處理吧~~

FindYourCoffee 專案的需求 :

  • [x] 點擊地圖標記顯示商家資訊
  • [x] 顯示我的位置
  • [x] 在地圖上顯示咖啡廳標記
  • [x] 點擊地圖標記顯示咖啡廳資訊
  • [x] 顯示我的位置附近的咖啡廳資訊
  • [ ] 加入篩選功能

今日推推

Yes


上一篇
Day28 在 Google 地圖上顯示全台咖啡廳資訊 - 6 顯示我的位置附近的咖啡廳(上)
下一篇
Day30 第一次用 Kotlin 寫專案的心得
系列文
喝咖啡要30天?一起用 Kotlin 打造尋找好喝咖啡的 App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言