App/Kotlin
[Android_API] 네이버 검색 API 지역/장소 찾기 (Retrofit사용)
Cune
2022. 3. 28. 15:43
해당 글을 참고해서 작성했습니다.
검색 API 지역 검색 개발가이드
NAVER Developers - 검색 API 지역 검색 개발가이드
developers.naver.com
[Android] 레트로핏으로 네이버 검색 API 사용하는 법
네이버 검색 API를 사용할 일이 생겨서 찾아보는데, 자바 언어로 레트로핏을 사용해 가져오는 예제가 보이질 않았다. 비슷한 API를 코틀린으로 작성한 건 있었는데, 이걸 보면서 자바로 바꿔봤더
onlyfor-me-blog.tistory.com
baseUrl에 네이버 검색 오픈 api 링크를 넣어줍니다.
class RetrofitClient {
companion object{
//네이버 검색 오픈 api
private const val BASE_URL = "https://openapi.naver.com/v1/"
private var instance: Retrofit? = null
fun getInstance(): Retrofit?{
if(instance == null) {
val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
StrictMode.setThreadPolicy(policy)
// Gson 은 Java 객체를 JSON 으로 변환할 수 있다
val gson = GsonBuilder()
.setLenient()
.create()
instance = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create()) // 문자열 리턴받는 경우
.addConverterFactory(GsonConverterFactory.create(gson)) // object, integer
.build()
}
return instance
}
}
}
api 통신을 위한 인터페이스
interface BbsService {
@GET("search/{type}")
fun getSearchResult(
@Header("X-Naver-Client-Id") id: String?,
@Header("X-Naver-Client-Secret") pw: String?,
@Path("type") type: String?,
@Query("query") query: String?
): Call<String?>?
}
getResult함수를 통해 결과값 받기
class WriteFragment: Fragment(R.layout.fragment_write) {
private val TAG = this.javaClass.simpleName
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
fun getResult() {
val bbsService = RetrofitClient2.getInstance()?.create(BbsService::class.java)
val call: Call<String?>? = bbsService?.getSearchResult("클라이언트 아이디", "클라이언트 비밀번호", "local.json", "스타벅스")
call?.enqueue(object : Callback<String?> {
override fun onResponse(call: Call<String?>?, response: Response<String?>) {
if (response.isSuccessful() && response.body() != null) {
val result: String = response.body()!!
Log.e(ContentValues.TAG, "성공 : ${result}")
} else {
Log.e(ContentValues.TAG, "실패 : " + response.body())
}
}
override fun onFailure(call: Call<String?>?, t: Throwable) {
Log.e(ContentValues.TAG, "에러 : " + t.message)
}
})
}
}
콘솔창 결과
키워드 검색을 통해서 지도에서 확인하고 선택하는 방법을 원했으나 이 방법은 결괏값이 1개밖에 안 나오는 것 같아서 카카오 지도 api를 사용해 봐야겠다