Skip to content

Commit

Permalink
[feat] : 카카오 장소 검색 searchView 기능 구현 (#11)
Browse files Browse the repository at this point in the history
  • Loading branch information
PIYUJIN committed Oct 7, 2023
1 parent d40463c commit 4d5cedf
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,13 +1,30 @@
package com.pcandriod.kusitms_hackathon_c.presentation.ui.main

import android.content.Context
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.inputmethod.InputMethodManager
import com.pcandriod.kusitms_hackathon_c.BuildConfig
import com.pcandriod.kusitms_hackathon_c.R
import com.pcandriod.kusitms_hackathon_c.data.data.ResultSearchKeyword
import com.pcandriod.kusitms_hackathon_c.data.remote.service.KakaoAPI
import com.pcandriod.kusitms_hackathon_c.databinding.ActivityMainBinding
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding

companion object {
const val BASE_URL = "https://dapi.kakao.com/"
const val API_KEY = "KakaoAK ${BuildConfig.KAKAO_SEARCH_KEY}" // REST API 키
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main)
Expand All @@ -16,5 +33,11 @@ class MainActivity : AppCompatActivity() {
val view = binding.root
setContentView(view)
}

// 키보드 내리는 메서드
fun hideKeyboard() {
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.pcandriod.kusitms_hackathon_c.presentation.ui.main.map

import android.os.Bundle
import android.os.SystemClock
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.SearchView
import com.naver.maps.geometry.LatLng
import com.naver.maps.map.CameraAnimation
import com.naver.maps.map.CameraUpdate
Expand All @@ -15,8 +17,15 @@ import com.naver.maps.map.NaverMapSdk
import com.naver.maps.map.OnMapReadyCallback
import com.naver.maps.map.util.FusedLocationSource
import com.pcandriod.kusitms_hackathon_c.BuildConfig
import com.pcandriod.kusitms_hackathon_c.data.data.ResultSearchKeyword
import com.pcandriod.kusitms_hackathon_c.data.remote.service.KakaoAPI
import com.pcandriod.kusitms_hackathon_c.databinding.FragmentMapBinding
import com.pcandriod.kusitms_hackathon_c.presentation.ui.main.MainActivity
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

class MapFragment : Fragment(), OnMapReadyCallback {

Expand Down Expand Up @@ -48,6 +57,23 @@ class MapFragment : Fragment(), OnMapReadyCallback {

fragmentMapBinding.run {

svPlace.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {

// 검색 버튼 누를 때 호출
searchKeyword(query.toString())

mainActivity.hideKeyboard()
return true
}

override fun onQueryTextChange(newText: String?): Boolean {

// 검색창에서 글자가 변경이 일어날 때마다 호출

return true
}
})
}

return fragmentMapBinding.root
Expand Down Expand Up @@ -102,7 +128,7 @@ class MapFragment : Fragment(), OnMapReadyCallback {
naverMap.isIndoorEnabled = true

// 초기 위치 설정
val cameraUpdate = CameraUpdate.scrollTo((LatLng(37.631651, 127.077487))).animate(
val cameraUpdate = CameraUpdate.scrollTo((LatLng(37.565669, 127.019452))).animate(
CameraAnimation.Easing
)
naverMap.moveCamera(cameraUpdate)
Expand All @@ -121,4 +147,32 @@ class MapFragment : Fragment(), OnMapReadyCallback {
// naverMap.locationSource = locationSource

}

// 키워드 검색 함수
private fun searchKeyword(keyword: String) {
val retrofit = Retrofit.Builder() // Retrofit 구성
.baseUrl(MainActivity.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
val api = retrofit.create(KakaoAPI::class.java) // 통신 인터페이스를 객체로 생성
val call = api.getSearchKeyword(MainActivity.API_KEY, keyword) // 검색 조건 입력

// API 서버에 요청
call.enqueue(object: Callback<ResultSearchKeyword> {
override fun onResponse(
call: Call<ResultSearchKeyword>,
response: Response<ResultSearchKeyword>
) {
// 통신 성공 (검색 결과는 response.body()에 담겨있음)
Log.d("큐커톤", "Raw: ${response.raw()}")
Log.d("큐커톤", "Body: ${response.body()}")
Log.d("큐커톤", "first Body: ${ response.body()!!.documents[0].place_name}")
}

override fun onFailure(call: Call<ResultSearchKeyword>, t: Throwable) {
// 통신 실패
Log.w("큐커톤", "통신 실패: ${t.message}")
}
})
}
}
8 changes: 8 additions & 0 deletions app/src/main/res/layout/fragment_map.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@
android:orientation="vertical"
tools:context=".presentation.ui.main.map.MapFragment">

<SearchView
android:id="@+id/sv_place"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="14dp"
android:layout_marginBottom="9dp"
android:queryHint="신당동"/>

<com.naver.maps.map.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
Expand Down

0 comments on commit 4d5cedf

Please sign in to comment.