我收到了 android studio 的新更新 (4.0),更新向导说kotlin 和 firebase 服务与此更新不兼容。
更新后我可以使用 kotlin 和 firebase 服务吗?或者考虑到我的一些活动项目使用 kotlin,下载此更新是否安全。
大约有六个不同的州BottomSheetBehavior。我没有得到他们的任何适当的解释。
就像我不明白STATE_HIDDEN和之间的区别STATE_COLLAPSED?
STATE_SETTLING同样,和 之间有什么区别STATE_DRAGGING?
还有什么用STATE_HALF_EXPANDED?
android coordinator-layout bottom-sheet android-bottomsheetdialog
我在我的应用程序中使用导航组件进行 jetpack 组合,如下所示:
@Composable
fun FoodiumNavigation() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screen.Main.route,
) {
composable(Screen.Main.route) {
MainScreen(navController)
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
我正在像这样进入viewmodel我的MainScreen组合:
@Composable
fun MainScreen(navController: NavController) {
val mainViewModel: MainViewModel = viewModel()
...
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个运行时异常作为Cannot create an instance of class com.package.main.MainViewModel.
在这里,我声明这仅在使用导航组件时发生,即一切正常,并且mainViewModel在我的应用程序中使用导航组件之前已成功实例化。
该MainViewModel是这样的:
@ExperimentalCoroutinesApi
@HiltViewModel
class MainViewModel @Inject constructor(private val postRepository: PostRepository) :
ViewModel() {
private val _postsLiveDataState = MutableLiveData<UiState<List<Post>>>()
val postLiveState: LiveData<UiState<List<Post>>> = …Run Code Online (Sandbox Code Playgroud) java android kotlin android-jetpack-navigation android-jetpack-compose
我将我的 Android Studio Canary 更新到 version 2020 3.1 Canary 15,这也要求我将我的 AGP 更新到 version 7.0.0-alpha15。我正在使用kotlin-gradle-dsl我的 gradle 构建文件,这些文件现在无法使用Unresolved reference.
请注意,在更新到 version 之前,gradle 已成功构建7.0.0-alpha15。
我的应用程序级别build.gradle.kts如下:
import com.android.build.gradle.internal.cxx.configure.gradleLocalProperties
plugins {
id("com.android.application")
id("kotlin-android")
id("kotlin-kapt")
id("dagger.hilt.android.plugin")
}
val apiKey: String = gradleLocalProperties(rootDir).getProperty("API_KEY")
android {
compileSdkVersion(30)
buildToolsVersion("30.0.3")
defaultConfig {
applicationId("com.training.flicker")
minSdkVersion(21)
targetSdkVersion(30)
versionCode(1)
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
buildConfigField("String", "API_KEY", apiKey)
}
buildTypes {
release {
minifyEnabled(false)
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro" …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我从未添加
implementation androidx.coordinatorlayout:coordinatorlayout但是我仍然可以用androidx.coordinatorlayout.widget.CoordinatorLayout在我的笔记本上activity_main.xml。
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.beats"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
implementation 'com.google.android.material:material:1.0.0'
}
Run Code Online (Sandbox Code Playgroud)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_height="192dp"
android:layout_width="match_parent">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:toolbarId="@+id/toolbar" …Run Code Online (Sandbox Code Playgroud) 早些时候,我在我的项目中使用改造版本 2.6.2来调用 api 服务,一切正常。我正在创建一个自定义Interceptor添加api key到每个请求的标头。
网络拦截器.kt
class NetworkInterceptor() : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
var request = chain.request()
request = request.newBuilder()
.addHeader("Authorization", "Client-ID ${NetworkConfig.CLIENT_ID}")
.build()
return chain.proceed(request)
}
}
Run Code Online (Sandbox Code Playgroud)
我改装库更新到版本2.9.0和更新后改装版本2.9.0我收到java.lang.NoSuchMethodError该行OkHttpClient.Builder()同时加入Interceptor到Retrofit.Builder()。
api.kt
interface Api {
@GET("photos")
suspend fun getPhotos(
@Query("page") pageNumber: Int,
@Query("per_page") pageSize: Int,
@Query("order_by") orderBy: String
) : Response<List<Photo>>
@GET("photos/random")
suspend fun getRandomPhoto() : Response<Photo>
companion object{ …Run Code Online (Sandbox Code Playgroud)