인프런 커뮤니티 질문&답변

kmj3134님의 프로필 이미지
kmj3134

작성한 질문수

모던 안드로이드 - 코틀린과 Jetpack 활용

Retrofit 사용법 소개, 서비스 인터페이스 작성

서비스 인터페이스 작성시

작성

·

324

0

강의 잘 듣고 있습니다.

강의참고하면서 다른 API조회하는 통신을 해보려고하는데,
해당API의 request는
POST 형태로 String, Int가 포함된 갓을 요청받습니다.
하여

@FormUrlEncoded

@POST("end_point")

suspend fun func(  @Field ("aa") aa:String

, @Field("bb") bb:Int ) : aaa
형태로 서비스인터페이스를 작성하였습니다.

허나 해당 서버(?)에서 aa,bb 모두 String 형태로  값이 넘어와  제대로된 response를 받지못하고 있습니다.

검색 해보니, 전송할 값들을 @Body에 담아보내면 Int형을 그대로 보내진다하여 적용해봤지만, Json형태로 정송되어 이 또한 정상적으로 response를 받지 못했습니다.

이와 관련하여 더 참고할 수 있는 부분이 있을까 조언 구합니다.
((retrofit통신시 Field가 Int에서 String으로 바뀌는 문제))

답변 11

0

오준석님의 프로필 이미지
오준석
지식공유자

Retrofit은 워낙 사용법이 간단해서 이렇게 문제가 지속될 확률이 적은데 서버쪽 문제는 아닐까요?

로그는 HttpLoggingInterceptor 로 확인하는 방법이 최선이고요.

Retrofit이 서드파티 라이브러리라서 안드로이드 공식문서에서는 가이드 제공이 없습니다.

0

kmj3134님의 프로필 이미지
kmj3134
질문자

네.. 
그럼 지금 타임아웃 에러만 계속 나는데..
다른 에러를 확인할 방법이 있을까요..?

자바에서 enqueue-callback 으로 통신할때
onFailure에서 확인 할 수있는것처럼
아예 통신이 되지 않았을때 활인할 수 있는 로그는 어떻게 남길 수 있을까요..
현재느 통신할때 HttpLoggingInterceptor만 사용해서 확인하는데 
안드로이드 공식문서에서 잘 못찾겠어서요..
혹시 어느부분을 확일해야 할지..

0

오준석님의 프로필 이미지
오준석
지식공유자

죄송합니다 제가 요새 너무 바뻐서 보지 못 하고 있습니다.

11월 중순까지 바쁠 것 같아서 중순 이후에나 볼 수 있을 것 같습니다. ㅠㅠ

0

오준석님의 프로필 이미지
오준석
지식공유자

제가 요즘에 바뻐서 테스트해 볼 시간이 없었는데요. 오늘중으로 테스트 해 보고 결과 알려드리겠습니다.

참고로 안드로이드에서 커넥션 타임아웃이 10초 넘어가면 응답없음으로 규정하니 1분으로 늘리시면 안 됩니다.

0

kmj3134님의 프로필 이미지
kmj3134
질문자

같은 문제로 자꾸 귀찮게 해드리는거같네요..

@FormUrlEncoded 제거하고 @Body로 보내면 각각파라메타의 타입은 지켜집니다 
다만, 
보내는 데이터전체가 Content-Type: application/json; 이 되어서그런지

I/okhttp.OkHttpClient: <-- HTTP FAILED: java.net.SocketTimeoutException: timeout

E/AndroidRuntime: FATAL EXCEPTION: main
 

timeOut에러가 납니다.

그래서 OkHttpClient 에서 connectTimeout등, 연결시간을 1분까지 늘려보았지만
여전히 timeOut에러가 발생합니다.

어떤걸 더 참고해야할지 감이 안잡힙니다..ㅠㅠ

0

오준석님의 프로필 이미지
오준석
지식공유자

그렇군요.

@FormUrlEncoded 제거하고 @Body로 보내면 될 것 같습니다만 이것도 문제가 있으시다는 것이지요?

음.. 저는 두 방법 중 하나는 반드시 되었던 것으로 기억을 하는데. 무슨 문제일까요..

0

kmj3134님의 프로필 이미지
kmj3134
질문자

혹시 몰라 같은상황인 경우 찾아 첨부합니다
https://stackoverflow.com/questions/50024022/retrofit-transform-my-fields-int-in-string

0

kmj3134님의 프로필 이미지
kmj3134
질문자

어떤테스트를 말씀하시는지 정확히 모르겠지만,
포스트맨에서 요청값타입int로 설정하고 값 담아서 요청했을때 response잘 되었습니다.

클라에서 보낼때 로그로 타입이 Int라는것을 확인했는데
서버에서 클라에서 오는 타입을 확인하니 String이었습니다..  

0

오준석님의 프로필 이미지
오준석
지식공유자

혹시 postman 같은 툴에서 테스트 했을 때는 잘 되나요?

0

kmj3134님의 프로필 이미지
kmj3134
질문자

서버측에서는 값을 Int로받아야하는데 (서버에서 요청하는 bb의형태가 Int입니다)
제가 넘긴 값이  서버에서 String으로 찍힙니다. 


Int로 보낸값이 String으로 바뀝니다..ㅜㅜ

0

오준석님의 프로필 이미지
오준석
지식공유자

혹시 서버 측에서 모든 값을 String으로 받는다거나 하지는 않을까요?

사용하고 계신 방법에 문제가 없습니다.

해당 서버에서 어떤 형태로 요청해야 하는지 가이드가 있을텐데 그것에 맞춰야 하는데 확인이 필요해 보입니다.

kmj3134님의 프로필 이미지
kmj3134

작성한 질문수

질문하기