Skip to content

Commit

Permalink
Merge pull request #12 from Kusitms-Hackathon-C/feature/11
Browse files Browse the repository at this point in the history
[Feat] #11
  • Loading branch information
PIYUJIN authored Oct 7, 2023
2 parents 896709a + 4d5cedf commit 831e368
Show file tree
Hide file tree
Showing 6 changed files with 123 additions and 9 deletions.
12 changes: 4 additions & 8 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,6 @@ android {
namespace 'com.pcandriod.kusitms_hackathon_c'
compileSdk 33

viewBinding{
enabled = true
}

buildFeatures {
buildConfig = true
}

defaultConfig {
applicationId "com.pcandriod.kusitms_hackathon_c"
minSdk 26
Expand All @@ -30,6 +22,7 @@ android {
buildConfigField "String", "MAP_API_KEY", properties['map.client.id']
buildConfigField "String", "NAVER_CLIENT_ID", properties['NAVER_CLIENT_ID']
buildConfigField "String", "NAVER_CLIENT_SECRET", properties['NAVER_CLIENT_SECRET']
buildConfigField "String", "KAKAO_SEARCH_KEY", properties['kakao.search.key']

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down Expand Up @@ -101,6 +94,9 @@ dependencies {
// 네이버 로그인
implementation 'com.navercorp.nid:oauth:5.6.0'

// 카카오 장소 검색
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

// 네이버 지도 SDK
implementation 'com.naver.maps:map-sdk:3.17.0'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.pcandriod.kusitms_hackathon_c.data.data

// 장소명, 주소, 좌표만 받는 클래스
data class ResultSearchKeyword(
var documents: List<Place> // 검색 결과
)

data class Place(
var place_name: String, // 장소명, 업체명
var category_group_name: String, // 중요 카테고리만 그룹핑한 카테고리 그룹명
var address_name: String, // 전체 지번 주소
var road_address_name: String, // 전체 도로명 주소
var x: String, // X 좌표값 혹은 longitude
var y: String, // Y 좌표값 혹은 latitude
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.pcandriod.kusitms_hackathon_c.data.remote.service

import com.pcandriod.kusitms_hackathon_c.data.data.ResultSearchKeyword
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Header
import retrofit2.http.Query

interface KakaoAPI {
@GET("v2/local/search/keyword.json") // Keyword.json의 정보를 받아옴
fun getSearchKeyword(
@Header("Authorization") key: String, // 카카오 API 인증키 [필수]
@Query("query") query: String // 검색을 원하는 질의어 [필수]
// 매개변수 추가 가능
// @Query("category_group_code") category: String

): Call<ResultSearchKeyword> // 받아온 정보가 ResultSearchKeyword 클래스의 구조로 담김
}
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 831e368

Please sign in to comment.