투케이2K

348. (android/kotlin) ok http 사용해 post 방식 query string 데이터 전달 및 요청 실시 본문

Android

348. (android/kotlin) ok http 사용해 post 방식 query string 데이터 전달 및 요청 실시

투케이2K 2022. 9. 27. 11:35

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : kotlin

 

[소스 코드]

    // TODO [테스트 메소드 정의 실시]
    fun testMain(){
        Log.i("---","---")
        Log.d("//===========//","================================================")
        Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : 테스트 함수 동작 실시]")
        Log.d("//===========//","================================================")
        Log.i("---","---")


        /**
         * ------------------------------------
         * TODO [요약 설명]
         * ------------------------------------
         * 1. okhttp : http 요청을 수행할 수 있는 라이브러리입니다.
         * ------------------------------------
         * 2. 필요 implementation :
         *
         * implementation("com.squareup.okhttp3:okhttp:4.9.0")
         * ------------------------------------
         * 3. 필요 import :
         *
         * import okhttp3.*
         * ------------------------------------
         * */


        // [로직 처리 실시]
        try{

            // ------------------------------------

            // TODO [전송 url 정의 실시]
            val url = "https://jsonplaceholder.typicode.com/posts"


            // TODO [파라미터값 선언 실시]
            val params = HashMap<String, Any>()
            params["userId"] = 1
            params["id"] = 1


            // TODO [url에 파라미터 추가 실시]
            val httpBuilder = Uri.Builder()
            val set: Set<*> = params.keys
            val iterator = set.iterator()
            while (iterator.hasNext()) {

                // [쿼리 파람 추가]
                val key = iterator.next() as String
                httpBuilder.appendQueryParameter(key, params[key].toString())
            }


            // TODO [OK HTTP 객체 선언 실시]
            val client = OkHttpClient()
            val request = Request.Builder()
            request.addHeader(
                "Content-Type",
                "application/x-www-form-urlencoded; charset=utf-8;"
            ) // [헤더 추가]



            // TODO [Request.Builder 에 추가]
            request.url(url + httpBuilder.toString())
            request.post(FormBody.Builder().build())

            Log.i("---","---")
            Log.w("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : OK HTTP 요청 실시]")
            Log.i("","\n"+"[originUrl : "+ url +"]")
            Log.i("","\n"+"[parameter : "+ httpBuilder.toString() +"]")
            Log.i("","\n"+"[reqUrl : "+ url + httpBuilder.toString() +"]")
            Log.w("//===========//","================================================")
            Log.i("---","---")



            // TODO [http 요청 수행 실시]
            //*
            client.newCall(request.build()).enqueue(object : Callback {
                // TODO [응답을 받은 경우]
                override fun onResponse(call: Call, response: Response) {
                    val responseBody = response.body?.string()
                    Log.i("---","---")
                    Log.w("//===========//","================================================")
                    Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : OK HTTP 응답 확인]")
                    Log.i("","\n"+"[responseStatusCode : "+ response.code +"]")
                    //Log.i("","\n"+"[responseHeader : "+ response.headers +"]")
                    Log.i("","\n"+"[responseBodyData : "+ responseBody +"]")
                    Log.w("//===========//","================================================")
                    Log.i("---","---")
                }

                // TODO [응답을 받지 못한 경우]
                override fun onFailure(call: Call, e: IOException) {
                    Log.i("---","---")
                    Log.e("//===========//","================================================")
                    Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : OK HTTP 요청 실패]")
                    Log.i("","\n"+"[error : "+ e.message +"]")
                    Log.e("//===========//","================================================")
                    Log.i("---","---")
                }
            })
            // */


            // ------------------------------------
        }
        catch(e : Exception){
            Log.i("---","---")
            Log.e("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : 에러 상황 발생]")
            Log.i("","\n"+"[error : "+e.message+"]")
            Log.e("//===========//","================================================")
            Log.i("---","---")
        }
    }
 

[결과 출력]

 

 

반응형
Comments