在我的 Android 应用程序中,Retrofit api 请求在 Android 12 及更低版本中工作正常,但在 Android 13+ 设备上无法工作

问题描述 投票:0回答:1

查看我的 Buid.gradle:应用程序级别

我已将所有依赖项更新到最新版本,并将 targetSDK 设置为 34 并将 SDK 编译为 34。

plugins {
    id("com.android.application")
    id("org.jetbrains.kotlin.android")
}

android {
    namespace = "dev.panwar.abtax"
    compileSdk = 34

    defaultConfig {
        applicationId = "dev.panwar.abtax"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        viewBinding = true
    }
}

dependencies {

    implementation("androidx.core:core-ktx:1.12.0")
    implementation ("com.karumi:dexter:6.2.3")
    implementation("androidx.appcompat:appcompat:1.6.1")
    implementation("com.google.android.material:material:1.11.0")
    implementation("androidx.constraintlayout:constraintlayout:2.1.4")
    implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.7.0")
    implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
    implementation("androidx.navigation:navigation-fragment-ktx:2.7.7")
//    retrofit
    implementation ("com.squareup.retrofit2:retrofit:2.9.0")
    implementation ("com.squareup.retrofit2:converter-gson:2.9.0")
    implementation ("com.squareup.okhttp3:okhttp:4.9.1")
    

    
    implementation("androidx.navigation:navigation-ui-ktx:2.6.0")
    implementation ("de.hdodenhof:circleimageview:3.1.0")
    testImplementation("junit:junit:4.13.2")
    androidTestImplementation("androidx.test.ext:junit:1.1.5")
    androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")


}

我已在多个 Android 12 或更低版本的设备上尝试过,API 请求工作正常,但在 Android 13+ 上,它将出现 onFailure 函数。

val call: Call<LoginResponse> = RetrofitInstance.api.loginUser(email, password)
                call.enqueue(object : Callback<LoginResponse> {
                    override fun onResponse(call: Call<LoginResponse>, response: Response<LoginResponse>) {
                        if (response.isSuccessful) {
                            hideProgressDialogue()
                            val registrationResponse = response.body()
                            if (registrationResponse?.message=="User logged In Successfully"){
//                                saving auth token
                                saveAuthToken(registrationResponse.accessToken)
                                startActivity(Intent(this@LoginActivity,HomeActivity::class.java))
                                finish()
                            }else{
                                Toast.makeText(this@LoginActivity,registrationResponse?.message,Toast.LENGTH_SHORT).show()
                            }
                            Log.e("LoginResponse",response.body().toString())
//                        Toast.makeText(this@SignUpActivity, "${registrationResponse?._id}", Toast.LENGTH_SHORT).show()
                        } else {
                            hideProgressDialogue()
                            val errorBody = response.errorBody()?.string()
                            val jsonObject = JSONObject(errorBody)
                            val errorMessage = jsonObject.getString("message")

                            // Show the error message in your app (e.g., using a Toast or a TextView)
                            // For example, using Toast:
                            Toast.makeText(this@LoginActivity, errorMessage, Toast.LENGTH_LONG).show()
                        }
                    }

                    override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
                        hideProgressDialogue()
                        // Handle failure (e.g., network issues)
                        Toast.makeText(this@LoginActivity, "Request failed: ${t.message}", Toast.LENGTH_SHORT).show()
                    }
                })

应该解决什么问题?

android api kotlin retrofit2 android-13
1个回答
0
投票

你是否在network_security_config.xml中应用了这个 我认为在 Android 13 网络安全中,网络安全配置或 Android 13+ 中的行为。 Android 13 (Tiramisu) 引入了可能影响网络连接的新功能和行为更改。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <!-- Trust preinstalled CAs -->
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

在清单文件中

<application
    android:networkSecurityConfig="@xml/network_security_config"
    ...>
    ...
</application>
© www.soinside.com 2019 - 2024. All rights reserved.