小编Fai*_*sal的帖子

Koin:NoBeanDefFoundException,检查你的模块定义

koin测试结果如下:

org.koin.core.error.NoBeanDefFoundException: No definition found for '<class_name>' has been found. Check your module definitions.

该课程EmailValidatorUtilImpl实施得很好,

import org.junit.After
import org.junit.Assert
import org.junit.Before
import org.junit.Test
import org.koin.core.context.startKoin
import org.koin.core.context.stopKoin
import org.koin.dsl.module
import org.koin.test.KoinTest
import org.koin.test.inject

class EmailValidatorUtilImpl : EmailValidatorUtil {

    private val pattern = Pattern.compile(EMAIL_PATTERN)
    private var matcher: Matcher? = null

    override fun validateEmail(email: String): Boolean {
        matcher = pattern.matcher(email)
        return matcher!!.matches()
    }

    companion object {
        private val EMAIL_PATTERN = "^[a-zA-Z0-9#_~!$&'()*+,;=:.\"(),:;<>@\\[\\]\\\\]+@[a-zA-Z0-9-]+(\\.[a-zA-Z0-9-]+)*$"
    }
}

Run Code Online (Sandbox Code Playgroud)

并且,注入 KoinTest 如下:


class EmailValidatorUtilImplTest : KoinTest, …
Run Code Online (Sandbox Code Playgroud)

android unit-testing dependency-injection kotlin koin

10
推荐指数
2
解决办法
9193
查看次数

如何使用 kotlin 协程处理回调

以下代码段在顺序代码流中将结果返回为“null”。我知道协程可能是异步处理回调的可行解决方案。


    fun getUserProperty(path: String): String? {
        var result: String? = null
        database.child(KEY_USERS).child(getUid()).child(path)
            .addListenerForSingleValueEvent(object : ValueEventListener {
                override fun onCancelled(error: DatabaseError) {
                    Log.e(TAG, "error: $error")
                }

                override fun onDataChange(snapshot: DataSnapshot) {
                    Log.w(TAG, "value: ${snapshot.value}")
                    result = snapshot.value.toString()
                }
            })
        return result
    }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,协程是否可以帮助等待回调(onDataChange()/onCancelled())的结果?

android callback kotlin firebase-realtime-database kotlin-coroutines

8
推荐指数
2
解决办法
4762
查看次数

MaterialAlertDialogBu​​ilder 在自定义视图 editText 上崩溃

尝试读取 editText 内容时 AlertDialog(Material) 崩溃。

警报对话框:

MaterialAlertDialogBuilder(activity)
            .setTitle(title)
            .setMessage(message)
            .setView(R.layout.dialog_settings_entry)
            .setPositiveButton(getString(R.string.text_change)) { dialog, which ->
                etUserInput.hint = message
                sgr = etUserInput.text.toString() // << crashes here
                dialog.dismiss()
            }
            .setNegativeButton(getString(android.R.string.cancel)) { dialog, _ ->
                dialog.dismiss()
            }
            .show()
Run Code Online (Sandbox Code Playgroud)

单击肯定按钮结果如下:

    java.lang.IllegalStateException: etUserInput must not be null
        at com.home.profile.SettingsFragment$buildAlertDialog$1.onClick(SettingsFragment.kt:332)
        at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage(AlertController.java:167)
Run Code Online (Sandbox Code Playgroud)

etUserInput是在一个单独的布局简单EDITTEXT。不确定崩溃原因。希望对它有任何了解或任何有用的材料样本。

android android-edittext illegalstateexception material-dialog

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

KoinAppAlreadyStartedException:Koin 应用程序已经启动

使用 koin-2.0.1 进行 Android 测试,尽管每个测试分别通过,但无法同时测试所有 3 个测试。

class NumberFormatterUtilImplTest : KoinTest {

    private val numberFormatterUtil: NumberFormatterUtilImpl by inject()

    @Before
    fun setUp() {
        startKoin { modules(utilsModule) }
    }

    @Test
    fun `does formatter returns two digit faction if supplied one digit value`() {
        val result = numberFormatterUtil.getAdjustedCurrencyRate(18.0)
        Assert.assertEquals(result, 18.00, 1.0)
    }

    @Test
    fun `does formatter returns two digit faction if supplied multiple digits value`() {
        val result = numberFormatterUtil.getAdjustedCurrencyRate(18.12343)
        Assert.assertEquals(result, 18.12, 1.0)
    }

    @Test
    fun `does formatter returns rounded two digit faction …
Run Code Online (Sandbox Code Playgroud)

testing kotlin koin

5
推荐指数
3
解决办法
5405
查看次数

在 AndroidX Fragment 中禁用后退按钮

我正在使用单活动模式(每个 UI 的片段)与 Android 的 Jetpack 导航一起进行应用程序开发。每个片段代表一个 UI。有什么简单的方法可以禁用后按动作(软/硬件按钮)?

谢谢。

android android-jetpack-navigation

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

TextView Drawable 兼容返回 null

我的 TextView 有与其关联的 Drawable 图标,如下所示:

<androidx.appcompat.widget.AppCompatTextView
    android:id="@+id/tvProfile"
    android:drawableStart="@drawable/ic_menu_profile" />
Run Code Online (Sandbox Code Playgroud)

当尝试在运行时对 textView 的可绘制紧凑进行着色/着色时,以下尝试返回 null。但是,android:drawableLeft返回可绘制实例。

tvProfile.compoundDrawables[0]?.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
Run Code Online (Sandbox Code Playgroud)

想知道有什么解决方案吗android:drawableStart

android textview

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

Android:如何获取默认日期/时间格式?

每个时区都有自己的日期/时间格式。比如说,

UK >> dd/MM/yyyy    
US >> M/d/yyyy     
Run Code Online (Sandbox Code Playgroud)

有关更多信息,https://gist.github.com/mlconnor/1887156

我确信 Android 可能有办法检索默认日期格式。任何人都可以指导什么是最简单的获取方法吗?

datetime android

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