提问者:小点点

未解决的参考改造2


今天开始了一个使用androidx库针对API28的新项目。当尝试在我的项目中使用Retrofit或OkHTTP3时,gradle sync运行良好,但是当尝试在设备上运行时,kotlin编译器抱怨“未解决对Retrofit 2/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.")
        }
    }
}

感谢任何帮助。


共3个答案

匿名用户

我还没有足够的观点来评论或支持,但我也遇到了同样的问题,并用

文件-

进入我对build. gradle.kts的依赖:

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

然后在我的一个课程中,我有一些无法识别的导入。例如:

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

匿名用户

有时Gradle可能由于某种原因无法正确同步,包括下载超时或其他可能的奇怪东西,解决方法可能是设置另一个版本(希望是更新的),然后重新同步Gradle

  • 对于改造,您可以尝试GitHub版本/发布列表中的版本

虽然如果问题仍然存在,其他原因可能是互联网/访问存储库问题,或者IDE某些原因(如文件权限更改、硬件问题等)无法访问有效捕获

  • 对我来说发生了很多次的一件事,这并不是一个坏主意,就是检查代理的东西,既可以从IDE的设置,也可以从属性/设置文件(不确定现在是否已经修复,但从个人经验来看,有时单独更改IDE的设置并不能从某些属性文件中删除设置)
  • 百万分之一的机会也可能会做一些事情:文件-

匿名用户

这里也有同样的问题。唯一有帮助的是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"
    }