안드로이드 통신이 안되는 증상 해결법

Kim Nahyeong·2021년 11월 18일
1

간단하게 get도 안되던 증상

val client = OkHttpClient()
val url = "http://(url 어쩌고)"

val request: Request = Request.Builder()
            .url(url)
            .get()
            .build();

client.newCall(request).enqueue(object : Callback {
            override fun onFailure(call: Call, e: IOException) {
                runOnUiThread{ Log.d("test","failt")}
            }

            @Throws(IOException::class)
            override fun onResponse(call: Call, response: Response) {
                if (response.isSuccessful) {
                    val myRequest = response.body!!.string()
                    runOnUiThread { Log.d("testRequest", myRequest) } // 통신 결과 값

                }
            }
        })

이렇게 okHttpClient를 이용한, 무진장 간단하게 긁어온 통신 코드가 먹통이 된 상황.

해결 방법

팀원분께서 해결책을 제시해주셨는데

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

에 이 코드를 추가하고,

network_security_config.xml

파일을 생성하여

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true"/>
</network-security-config>

의 config 코드를 넣어주고

다시

AndroidManifest.xml

로 돌아와서

<use-permission>

아래

<application
	android:networkSecurityConfig="@xml/network_security_config">

을 넣어준다. 그러면 성공적으로 통신 완료.

myRequest 값을 json 형식으로 받아올 수가 있다.

진짜 몇시간을 고생했는지 허참 코딩은 너무 어려워 ㅜㅜ

추가

알고보니 안드로이드 9 이상이면 안되는 현상인가 봄.
이거 추가하고도 통신이 안돼서 확인해보니까

javax.net.ssl.SSLHandshakeException: Chain validation failed

에러가 발생했길래 avd cold boot로 실행하니까 바로 되더라

0개의 댓글