본문 바로가기

안드로이드 스튜디오

[안드로이드 스튜디오 코틀린] OkHttp버전에 따른 JsonObject 사용법

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
반응형