Moments of growth

[안드로이드 오류 해결] java.lang.IllegalArgumentException: URL query string "email={email}" must not have replace block. For dynamic query parameters use @Query. 본문

Android [오류 해결] 🔨

[안드로이드 오류 해결] java.lang.IllegalArgumentException: URL query string "email={email}" must not have replace block. For dynamic query parameters use @Query.

뮤링이 2021. 11. 20. 01:15

📌 user 이메일로 찾기 구현

 

@GET을 사용할 때 지금 여기는 경로가 /user?email=email 이기 때문에

@GET("user?email={email}") //잘못된 코드

계속 위의 코드로 작성을 했었다

 

 

그러자 아래와 같은 오류가 떴다

 

 

 

 

🔨 해결방법

 

📌 @Path를 사용해야하는 경우 : 서버 Url Path가 동적으로 들어가야할 때

@GET("chulim/tistory/{id}/videos")
fun getVideo(@Path("id") id: String): Call<Videos>

 

📌 @Query를 사용해야하는 경우 : Url에 query parameter를 넣어줄 경우

Url로 표현한다면 chulim/tistory/streams/?query=

@GET("chulim/tistory/streams")
fun searchChannels(@Query("query") query: String): Call<ChannelData>

 

 

[참고 블로그] https://gwi02379.tistory.com/3

 

[Android] Retrofit 2.0 사용 방법 (Kotlin) - 1. 시작하기

Retrofit 2.0 사용 방법에 대한 포스팅을 해보려고 합니다. 서버와 통신을 하는 데 많이 쓰는 아주 유용한 라이브러리입니다. HttpURLConnection을 사용하여 통신을 위한 코드를 직접 작성할 수도 있지만

gwi02379.tistory.com

-> 진짜 이해하기 쉽게 잘 설명되어있다, 더 추가적으로 궁금한 점은 여기서 보면 될 것 같다

 

 

 

📌 여기서 쿼리 부분인 @Get() 안에 ?email= 이 부분을 넣으면 안된다는 것을 발견해서 @GET("user")로 변경했다

 

 

✔ @Path를 사용할지 @Query를 사용할지 헷갈렸는데 ?email=email 이 부분이 쿼리문이므로 @Query를 사용했다

실제로 @Path를 사용하면 아래의 오류가 난다.

@Query를 사용해야하는데 @Path로 쓴 경우 오류

 

 

📌 그리고 FindUserActivity.kt에서 이렇게 사용한다.

 

✔ GET은 body값이 없기 때문에 RequestGetUserByEmailData.kt는 필요 없이 바로 binding.etUseremail.text.toString()으로 받은 값을 인자로 준다.

 

✔ 그럼 쿼리문에 email = email ←이 부분에 들어가게 된다.



 

 

 

 

 

 

 

Comments