Android 改装2.6.2不适用于沃达丰移动数据,但适用于WiFi

Android 改装2.6.2不适用于沃达丰移动数据,但适用于WiFi,android,android-studio,networking,retrofit,retrofit2.6,Android,Android Studio,Networking,Retrofit,Retrofit2.6,请帮助我,我的一些应用程序用户抱怨或反馈说,他们的应用程序不适用于移动数据(沃达丰4G),但适用于wifi 我正在使用改型-2.6.2和okhttp3-4.2.2. Retrofit.Builder() .baseUrl(baseurl) .addConverterFactory(GsonConverterFactory.create()) .client(getClient()) .build() fun getClient(): OkHttpClient {

请帮助我,我的一些应用程序用户抱怨或反馈说,他们的应用程序不适用于移动数据(沃达丰4G),但适用于wifi

我正在使用改型-2.6.2okhttp3-4.2.2.

Retrofit.Builder()
    .baseUrl(baseurl)
    .addConverterFactory(GsonConverterFactory.create())
    .client(getClient())
    .build()

fun getClient(): OkHttpClient {
    return OkHttpClient.Builder().addInterceptor(HeaderIntercepter())
        .readTimeout(2, TimeUnit.MINUTES)
        .writeTimeout(2, TimeUnit.MINUTES)
        .connectTimeout(2, TimeUnit.MINUTES)
        .build()
}
API是在亚马逊服务器上使用http和https制作的

我身边缺少什么东西请给我解决方案


提前感谢。

网络安全配置添加到res/xml文件夹

<?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
      <base-config cleartextTrafficPermitted="true">
       <trust-anchors>
        <certificates src="system" />
       </trust-anchors>
      </base-config>
    </network-security-config>
并确保在
清单
文件中授予
互联网
权限

<uses-permission android:name="android.permission.INTERNET" />
 <uses-library
        android:name="org.apache.http.legacy"
        android:required="false"/>
usebrary'org.apache.http.legacy'
添加到您的应用程序构建梯度中

android {
compileSdkVersion 28
defaultConfig {
    applicationId "your_application_id"
    minSdkVersion 15
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    useLibrary 'org.apache.http.legacy'
}

这是一些类似沃达丰网络的4G网络问题。此网络中TCP连接的连接时间connectTimeout始终处于连接状态,因此api在2分钟之前无法连接,因为提到了2分钟的超时时间

因此,我通过将TCP连接时间connectTimeout减少到1秒来解决这个问题,下面是代码:

OkHttpClient.Builder()
        .addInterceptor(HeaderIntercepter())
        .callTimeout(2, TimeUnit.MINUTES)
        .connectTimeout(1, TimeUnit.SECONDS)
        .readTimeout(1, TimeUnit.MINUTES)
        .writeTimeout(1, TimeUnit.MINUTES)
        .build()

如果您的api或url不需要通过改装在数据发送和接收之间建立TCP连接,那么您可以这样做,现在对我来说效果很好。

@DeePanShu尝试使用
legacy
希望这对您有用,第一次加载大约需要2-3分钟的时间,之后效果会很好
OkHttpClient.Builder()
        .addInterceptor(HeaderIntercepter())
        .callTimeout(2, TimeUnit.MINUTES)
        .connectTimeout(1, TimeUnit.SECONDS)
        .readTimeout(1, TimeUnit.MINUTES)
        .writeTimeout(1, TimeUnit.MINUTES)
        .build()