Androidと通信できないトラブルシューティング方法


簡単な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で実行すればいいです.