今天开始了一个使用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.")
}
}
}
感谢任何帮助。
我还没有足够的观点来评论或支持,但我也遇到了同样的问题,并用
文件-
进入我对build. gradle.kts的依赖:
implementation("com.squareup.okhttp3:okhttp:4.9.0")
然后在我的一个课程中,我有一些无法识别的导入。例如:
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
有时Gradle可能由于某种原因无法正确同步,包括下载超时或其他可能的奇怪东西,解决方法可能是设置另一个版本(希望是更新的),然后重新同步Gradle
虽然如果问题仍然存在,其他原因可能是互联网/访问存储库问题,或者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"
}