小编Bar*_*fet的帖子

MockK - 左侧匹配器的匹配模拟签名失败:[any(), any()]

我想实现一些 UI 测试,以确保今天实现的代码明天也能正常工作,但是当尝试查看过去实现的 UI 测试是否有效时,它会抛出此错误:

Caused by: io.mockk.MockKException: Failed matching mocking signature for left matchers: [any(), any()]

这种情况发生在every {} return Unit有一个名为 WakeUpTimeManager 的对象文件的行上,该文件调用 .set(param1, param2)函数,并且在该函数内部有一些内联函数,我认为这可能会导致问题,但我不知道。我尝试在互联网上搜索但找不到解决方案。

这是引发错误的测试:

  @Before
  fun setup() {
    mockkObject(WakeUpTimerManager)
    every { WakeUpTimerManager.set(any(), any()) } returns Unit
  }
Run Code Online (Sandbox Code Playgroud)

every这是在线调用的函数

  fun set(context: Context, timer: Timer) {
    if (timer.atMillis < System.currentTimeMillis()) {
      return
    }

    if (Preset.findByID(context, timer.presetID) == null) {
      return
    }

    //This is an inline function
    withGson {
      PreferenceManager.getDefaultSharedPreferences(context).edit {
        putString(PREF_WAKE_UP_TIMER, …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-testing mockk

21
推荐指数
2
解决办法
3万
查看次数

如何在撰写中设置高度 WRAP_CONTENT?

所以我知道当我不使用 Modifier.height()时就像设置了“WRAP_CONTENT”,但是如果我想将高度值设置为 WRAP_CONTENT 该怎么办?有没有办法做到这一点?

已经尝试过 InstrinsicSize.Min、InstrinsicSize.Max 和 0.dp。

寻找这样的东西:Modifier.height(WRAP_CONTENT)

这仅适用于特定知识,因为我在文档中找不到任何内容。

android android-jetpack-compose

12
推荐指数
1
解决办法
7088
查看次数

Dagger Hilt 注入 ActivityContext 时出错

我正在注入Dagger-Hilt一个依赖于@ActivityContextViewModel 的类,该模块安装在ActivityComponent活动中并限定范围,每当我尝试编译时,它都会抛出错误。供您参考,我还有其他带有 ActivityRetainedComponent 和 SingletonComponent 注入 @ApplicationContext 的模块。

\n

现在我试图弄清楚这个错误是什么意思。

\n
error: [Dagger/MissingBinding] com.rober.fileshortcut_whereismyfile.utils.PermissionsUtils cannot be provided without an @Inject constructor or an @Provides-annotated method.\n  public abstract static class SingletonC implements App_GeneratedInjector,\n                         ^\n      com.rober.fileshortcut_whereismyfile.utils.PermissionsUtils is injected at\n          com.rober.fileshortcut_whereismyfile.ui.fragments.filefragment.FileViewModel(\xef\xbf\xbd, permissionsUtils, \xef\xbf\xbd)\n      com.rober.fileshortcut_whereismyfile.ui.fragments.filefragment.FileViewModel is injected at\n          com.rober.fileshortcut_whereismyfile.ui.fragments.filefragment.FileViewModel_HiltModules.BindsModule.binds(vm)\n      @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map<java.lang.String,javax.inject.Provider<androidx.lifecycle.ViewModel>> is requested at\n          dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [com.rober.fileshortcut_whereismyfile.App_HiltComponents.SingletonC ? com.rober.fileshortcut_whereismyfile.App_HiltComponents.ActivityRetainedC ? com.rober.fileshortcut_whereismyfile.App_HiltComponents.ViewModelC]\n
Run Code Online (Sandbox Code Playgroud)\n

这是代码(我不认为这里有什么问题)

\n
@Module\n@InstallIn(ActivityComponent::class)\nobject PermissionModule {\n\n    @ExperimentalCoroutinesApi\n    @Provides\n    @ActivityScoped\n    fun providePermissionsHelper(\n        @ActivityContext context: Context,\n    ) = PermissionsUtils(context)\n}\n
Run Code Online (Sandbox Code Playgroud)\n …

android dependency-injection dagger-2 dagger-hilt

9
推荐指数
1
解决办法
4955
查看次数

深色模式下奇怪的错误颜色文本撰写

嗨,我是新作曲家,我正在尝试调试这个奇怪的文本颜色错误

颜色应该是白色,它就像一种灰色的深色,一旦我将它们滚动到视线之外并滚动回到之前的位置,它似乎就会消失并设置白色。

很确定以前有人犯过这个错误,我错过了什么吗?为什么会出现这个错误?

编辑:只有当我的手机激活了黑暗模式时才会发生这种情况。如果我停用它并在 TodoTheme(...) 中设置 false/true ,一切都会按预期工作。

最简单的重现代码:

setContent {
    TodoTheme {
        TodoScreen()
    }
}

@Composable
fun TodoScreen(
) {
    val text = "This is a big text that will make color change and won't be very much visible for the user, why does this happen?"
    LazyColumn(){
        items(listOf(text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text,text)) { string ->
            Text(text = string, color = MaterialTheme.colors.onSurface)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

颜色是默认的颜色(我不认为这是颜色问题):

val LightThemeColors = lightColors(
    primary = Purple700,
    primaryVariant = Purple800,
    onPrimary = Color.White,
    secondary = Color.White,
    onSecondary = …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

7
推荐指数
1
解决办法
2521
查看次数

如何获取组合组件的整个偏移量

我知道如何获取按钮/或组件的 X,Y 坐标,但我想知道每个角的偏移量或至少是右下角的偏移量。例如,我从以下位置获取左上角坐标:

Modifier.onGloballyPositioned{
    it.positionInRoot().x
    it.positionInRoot().y
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有没有办法知道右下角坐标,以便我可以计算组件内部的差异偏移?

编辑:可能的解决方案 - >在组件旁边使用间隔符:让我们想象一下我们想要获得按钮的右下角。

Row(
    horizontalArrangement = Arrangement.Center,
    modifier = Modifier
        .fillMaxWidth()
    ) {
        Button(
            modifier = Modifier
                        .onGloballyPositioned {
                            it.positionInRoot().x
                            it.positionInRoot().y
                         }
         ) {...}
         Row(modifier =Modifier.fillMaxHeight(),verticalAlignment = Alignment.Bottom) {
              Spacer(
                  Modifier
                   .height(0.dp)
                   .width(0.dp)
                   .onGloballyPositioned {
                       it.positionInRoot().x
                       it.positionInRoot().y
                   }
              )
          }
    }
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

6
推荐指数
1
解决办法
6830
查看次数

调试返回的内容 -&gt; 错误 $ 处缺少所需值

所以当我使用新的 API 时,我通常会收到这种典型的错误消息

com.squareup.moshi.JsonDataException: Required value 'X' (JSON name 'x') missing at $
        at com.squareup.moshi.internal.Util.missingProperty(Util.java:649)
        at com.squareup.moshi.kotlin.reflect.KotlinJsonAdapter.fromJson(KotlinJsonAdapter.kt:103)
        at com.squareup.moshi.internal.NullSafeJsonAdapter.fromJson(NullSafeJsonAdapter.java:41)
        at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(MoshiResponseBodyConverter.java:46)
        at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(MoshiResponseBodyConverter.java:27)
        at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
        at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
        at okhttp3.RealCall$AsyncCall.run(RealCall.kt:138)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
Run Code Online (Sandbox Code Playgroud)

我想知道一种方法来准确调试此调用返回的内容。例如,如果它缺少参数“X”,那么我想知道它是否为空或者是否返回一些数据。

已经尝试过日志拦截器,但我认为我没有正确设置它。有什么确切的方法来调试此调用返回的确切数据是什么?

解决方案:我认为使用Web调试器是唯一的方法(例如Charles Proxy)

android android-debugging moshi retrofit2

6
推荐指数
0
解决办法
720
查看次数

不推荐使用 onActivityResult 如何发送 startResolutionForResult

所以我使用 gps 类来打开 gps,这是一种允许我们发送到的方法onActivityResult,但由于在 AndroidX 上已弃用并且仍然可用,android 团队向我们推荐下一个:

强烈推荐使用AndroidX中引入的Activity Result APIs

我有以下代码,我尝试发送到 onActivityResult

val rae = e as ResolvableApiException
rae.startResolutionForResult(context,Constants.GPS_REQUEST)
Run Code Online (Sandbox Code Playgroud)

如何使用新 API 处理相同的事情?

gps android deprecated onactivityresult androidx

5
推荐指数
1
解决办法
757
查看次数

如何在Android中设置不同的主题和最佳方式

我对这个话题有一些疑问。

我只使用 android 为我们提供的 API 的夜间/白天主题,您可以为两者设置主题。然后它适用于 setNightMode() 和类似的东西。然后我所做的是在视图背景中设置一种颜色,当设置为夜间主题时它会发生变化

所以我想知道我是否像这样创建 3 个主题(浅色/深色/蓝色)(我不想重复代码,所以我将显示 1 个主题):

    <style name="Theme.Blue" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/green</item>
        <item name="colorPrimaryVariant">@color/greentwo</item>
        <item name="colorOnPrimary">@color/reed</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
Run Code Online (Sandbox Code Playgroud)

然后当我进入活动/片段时:

  1. 我检查用户设置的首选主题是什么,例如看到的主题是Theme.Blue

  2. 因此,对于这个主题,我想加载一些绿色文本和其他红色文本,所以我的想法是以编程方式设置主题。TextView.setAppareance(Theme style)这似乎是一项非常艰苦的工作。

同样的情况也适用于背景,其中存在相同颜色的较高和较低色调的对比等等。

我是否必须继承任何主题,将其设置在 xml 的顶部或将其 1 by 1 设置到每个视图或我不知道的任何内容?

  • 那么我该怎么做呢,推荐的方法是什么?

  • 我不太明白 colorPrimary、colorPrimaryVariant 之类的东西去哪里了。例如,当创建警报对话框时,按钮设置为绿色!

关于管理当前用户首选项主题不是问题,问题在于将其应用到所有视图的样式。

android android-theme android-view android-styles

3
推荐指数
1
解决办法
2061
查看次数

使用衍生状态的自定义保存程序rememberSaveable

我有一个rememberSaveable进行derivedStateOf一些计算以返回一个类作为输出。

我已经将 Parceable/Parcelize 添加到类中,但它仍然崩溃并告诉我实现自定义保护程序。我相信这是因为我正在使用derivedStateOf. 我是否可以保存衍生状态的计算输出的状态?

java.lang.IllegalArgumentException:无法使用当前的 SaveableStateRegistry 保存 DerivedState(value=MyClass(MyClass2()))。默认实现仅支持可以存储在 Bundle 内的类型。请考虑为此类实现自定义 Saver 并将其传递给 RememberSaveable()。

代码看起来像这样

val someCalculation by rememberSaveable(someTriggering) {
        derivedStateOf {
            someCalculationThatReturnsAClass()
        }
    }
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

3
推荐指数
1
解决办法
4311
查看次数

通过可组合项的参数传递变量是否被视为读取值?

假设我们有接下来的 5 行代码:

@Composable
fun MyParentComposable() {
    var myVariable by remember { mutableStateOf(0) } 
    MyChildComposable(myVariable)
}
Run Code Online (Sandbox Code Playgroud)
  • 我知道每当我们改变时,myVariable我们都会重新组合MyParentComposable,并且MyChildComposable任何其他孩子都会MyChildComposable()阅读该值。

  • 我知道,如果我不在myVariable任何可组合项中使用它MyChildComposable,那么在更改它时它仍然会被重新组合,因为我们正在某处读取它(我猜想在参数中,即使它没有被使用

  • 我知道,如果我们传递 lambda 并推迟读取,那么只有调用该值的组件和父作用域才会被重构MyChildComposable

问题是,当传递myVariable到时MyChildComposable,我是在读它还是还有别的东西?

我想查看一些反编译的代码或类似的东西来更深入地理解它,但我不知道应该去哪里。希望有人能在这里提供一些线索,让我可以说“是的,就是因为这个

这个例子也是如此

@Composable
fun MyParentComposable() {
    val myVariable = remember { mutableStateOf(0) } 
    MyChildComposable(myVariable.value)
}
Run Code Online (Sandbox Code Playgroud)

我正在读取范围中的值MyParentComposable()并将其传递下来MyChildComposable()

编辑:

没有 Lambda 的示例:ParentComposable 和 child 被重新组合,内部没有任何可组合项读取它,只有带有参数的可组合项

@Composable
fun MyParentComposable() {
    var myVariable by remember { mutableStateOf(0) …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack-compose

3
推荐指数
1
解决办法
1404
查看次数

更改撰写中 SelectionContainer 中选择文本的颜色

我想更改SelectionContainer的颜色,但在参数部分中没有看到任何可以在此处进行更改的选项。我还查看了内部代码,但看不到任何与颜色相关的内容。文档没有提到这一点。

问题:有没有办法改变选择颜色,或者这是不可能的?

android android-jetpack-compose

1
推荐指数
1
解决办法
2343
查看次数