未解决的引用 retrofit2

4
今天我开始了一个新项目,目标是使用androidx库来开发API28。在尝试在我的项目中使用Retrofit或OkHTTP3时,gradle sync没有问题,但是在尝试在设备上运行时,kotlin编译器会抱怨“无法解决到retrofit2/okhttp的引用”。
build.gradle
apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

//apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 'android-P'
    defaultConfig {
        applicationId "com.opticalgenesis.lbp.ktlab"
        minSdkVersion 21
        targetSdkVersion "P"
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha1'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
    implementation 'androidx.browser:browser:1.0.0-alpha1'
    implementation 'com.google.android.material:material:1.0.0-alpha1'
    implementation 'androidx.core:core-ktx:1.0.0-alpha1'
    implementation 'com.android.volley:volley:1.1.0'
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'
}

相关的 Kotlin 代码

import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity

import retrofit2.Call
import retrofit2.Callback
import retrofit2.Retrofit
import retrofit2.Response
import retrofit2.converter.gson.GsonConverterFactory

class LoginConfirmActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val i = intent
        val data = i.data

        val u = Uri.parse(data.toString())
        val code = u.getQueryParameter("code")
        val state = u.getQueryParameter("state")

        val generatedState = getSharedPreferences(MainActivity.PREFS_KEY, Context.MODE_PRIVATE).getString(MainActivity.STATE_KEY, "")

        if (state == generatedState) {
            Log.d("OAUTH", code)
            val r = Retrofit.Builder().apply {
                baseUrl("https://gitlab.com/oauth")
                addConverterFactory(GsonConverterFactory.create())
            }.build()
            val authApi = r.create(GitLabAuthApi::class.java)
            val codeResponse = authApi.getAccessToken(
                    Keys.appId,
                    Keys.secret,
                    code,
                    "authorization_code",
                    Keys.redirectUri)
            codeResponse.enqueue(object : Callback<CodeResponse> {
                override fun onResponse(call: Call<CodeResponse>?, response: Response<CodeResponse>) {
                    if (response.isSuccessful) {
                        parseAndStoreCodeResults(response.body()!!)
                    } else {
                        Log.e("AUTH_TAG", "Attempt to get code resulted in error ${response.errorBody()}")
                    }
                }

                override fun onFailure(call: Call<CodeResponse>?, t: Throwable?) {
                    t?.printStackTrace()
                }
            })
        } else {
            Log.e("AUTH_TAG", "States don't match.")
        }
    }
}

错误信息 errors

欢迎提供任何帮助。


请发布完整的日志消息 - dazza5000
@dazza5000 完成 - Joshua Feltimo
2
你可以尝试运行 ./gradlew --refresh-dependencies,然后执行 Invalidate caches/Restart 吗? - David Rawson
在您的URL末尾添加反斜杠,例如: "https://gitlab.com/oauth/"。请告诉我这是否解决了您的问题。同时,您能否在界面中指定终端节点并更新问题? - Keshav Aggarwal
4个回答

2

我还没有足够的积分来评论或点赞,但我遇到了同样的问题,并通过以下方式解决:

文件 -> 无效缓存/重启。

在我的 build.gradle.kts 依赖项中,我有:

implementation("com.squareup.okhttp3:okhttp:4.9.0")

在我的某个课程中,我有一些未被识别的导入。例如:

import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response

2
有时候Gradle由于下载超时或其他可能的问题而无法同步,解决方法可能是设置另一个版本(希望更近期),然后重新同步Gradle。
对于Retrofit,您可以尝试从GitHub版本/发布列表中选择一个版本。
尽管如此,如果问题仍然存在,可能的原因是互联网/存储库访问问题,或者IDE无法出于某些原因访问有效的缓存(例如文件权限更改、硬件问题等)。
我遇到过的一个问题是检查代理设置,包括IDE的设置和属性/设置文件(不确定现在是否已经修复,但根据个人经验,有时仅更改IDE的设置无法删除一些属性文件中的设置)。
还有一种可能性是:文件->无效缓存/重启。

0

我也遇到了同样的问题。唯一有用的方法是将Gradle构建工具降级至稳定版本3.1.3。

项目:build.gradle

dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }

0
我知道这是一个旧帖子,但是我对Kotlin还不熟悉,问题还没有解决。
对于我来说,在2.9.0版本的retrofit/gson中,选择文件->无效缓存/重启,解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接