728x90
반응형
OkHttp가 버전마다 사용법이 조금 다르다.
- 버전 3.X 인 경우 흔히 알고 있는 create를 사용하면 된다.
val jsonObject = JSONObject()
val requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonObject.toString())
- 버전 4.X 인 경우 -> create가 deprecated되었기 때문에
val jsonObject = JSONObject()
val mediaType = "application/json; charset=utf-8".toMediaType()
val body = jsonObject.toString().toRequestBody(mediaType)
이렇게 .toRequestBody()를 사용해서 retrofit에 담아주면 된다.
- 버전 4.X로 만든 함수 코드 ( Retrofit + OkHttp)
private fun postData(name: String, phoneNumber: String, birthday: String) {
val jsonObject = JSONObject()
try {
jsonObject.put("name", name)
jsonObject.put("birthday", birthday)
} catch (e: Exception) {
e.printStackTrace()
}
val mediaType = "application/json; charset=utf-8".toMediaType()
val body = jsonObject.toString().toRequestBody(mediaType)
val interceptor = HttpLoggingInterceptor()
interceptor.level = HttpLoggingInterceptor.Level.BODY
val client = OkHttpClient.Builder()
.addInterceptor(interceptor)
.connectTimeout(20000L, TimeUnit.SECONDS)
.build()
val retrofit = Retrofit.Builder()
.baseUrl("보낼 주소")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build()
val service = retrofit.create(Service::class.java)
service.postInfo(body).enqueue(object : Callback<Response> {
override fun onResponse(call: Call<Response>, response: Response<Response>) {
if (response.isSuccessful) {
response.body()?.result?.let {
Log.d("응답 성공 : ", it)
}
}
}
override fun onFailure(call: Call<Response>, t: Throwable) {
Log.d("실패 : ", t.message.toString())
}
})
}
-> try - catch문을 사용하는 이유 : 예외가 발생할 가능성이 있는 코드를 try{} 구문으로 감싸주고,
try{} 구문에서 예외가 발생하여 던져진 예외객체를 catch{} 구문을 통해 잡아서 처리하면 된다.
728x90
반응형
'안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오 자바] strings.xml에 있는 문자열 중 일부만 글자 변경하기 (1) | 2022.08.25 |
---|---|
[안드로이드 스튜디오] ViewBinding 사용 자바, 코틀린 코드 비교 (0) | 2022.08.19 |
[안드로이드 스튜디오 코틀린] JavaScript와 연결해주는 Android Bridge - Kotlin 정리 (0) | 2022.06.28 |
[안드로이드 스튜디오 코틀린] WebView에서 카메라 설정 (0) | 2022.06.09 |
[안드로이드 스튜디오] MVVM 패턴 (0) | 2022.05.24 |