FindYourCoffee 專案的需求 :
昨天已經將 APP 的初始定位點是我的位置,今天試著顯示附近的咖啡廳資料。
先想想該如何從當前的經緯度得知目前的所在城市。
爬了一下,發現可以使用 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 後,移動到當前位置,並顯示附近的咖啡廳資訊拉!
因為背景好花,就改了自定義視窗的背景色
但還有一些架構的地方要調整,明天再來處理吧~~
FindYourCoffee 專案的需求 :