小编And*_*rew的帖子

测试框架意外退出 - ClassNotFound 异常

经过长时间的调试和代码重构,我想重新运行一些测试。我遇到的问题是我总是收到以下错误:

"C:\Program Files\Android\Android Studio\jre\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\Android\Android Studio\lib\idea_rt.jar=50253:C:\Program Files\Android\Android Studio\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Android\Android Studio\lib\idea_rt.jar" com.intellij.rt.execution.CommandLineWrapper C:\Users\NAME\AppData\Local\Temp\idea_classpath1240585070 com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.example.app.validator.BTValidatorTest
`CommandLineWrapper` is ill-suited for launching apps on Java 9+.
If the run configuration uses "classpath file", please change it to "@argfile".
Otherwise, please contact support.

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

这是我的一个示例测试:

@RunWith(RobolectricTestRunner::class)
@Config(maxSdk = Build.VERSION_CODES.P, minSdk = Build.VERSION_CODES.P)
class BTValidatorTest {

    private val context = InstrumentationRegistry.getInstrumentation().targetContext
    private val formValidator = FormValidator(context)

    private lateinit var btValidator: BtValidator

    @Before …
Run Code Online (Sandbox Code Playgroud)

junit android kotlin android-espresso

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

挂起函数中的并行工作:使用协程范围安全吗?

我正在尝试使用 kotlin 协程,我问自己,如何在同一个挂起函数中执行多项工作(例如同时调用网络和本地数据库)。研究这个问题使我得到了以下解决方案:

suspend fun doWorkInParallel() {
    coroutineScope {
        val networkCall = async { // stuff  }
        val databaseCall = async { // stuff }
        awaitAll(networkCall, databaseCall)
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 使用上述方法是否正确,或者是否有另一种方法可以在同一个挂起函数中执行并行工作
  2. 当我调用挂起函数时,另一个“coroutineScope”是否会泄漏任何内容?
  3. 工作是并行完成的吗?
  4. networkCall当和 访问databaseCall同一个对象/更改同一个对象时会发生什么(例如,在networkCalla 变量内部设置为State X,在 adatabaseCall变量内部设置为Stata Y

android kotlin kotlin-coroutines

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

Android:切换片段后按钮 onClicklistener 不起作用

我有一个非常奇怪的问题。当我使用a从 导航Fragment 1到,然后使用后退按钮从 导航回 到 时,in不再起作用,因此无法再次导航到。Fragment 2btn.setOnClickListenerFragment 2Fragment 1btn.setOnClickListenerFragment 1Fragment 2

这是我的代码:

按钮 XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

// Custom Background for the button
<com.google.android.material.appbar.MaterialToolbar
        android:clickable="false"
        android:id="@+id/materialToolbar"
        android:layout_width="match_parent"
        android:layout_height="90dp"
        android:background="@color/btnColorGray"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">
    </com.google.android.material.appbar.MaterialToolbar>

    <com.google.android.material.button.MaterialButton
        android:clickable="true"
        android:focusable="true" />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

主要 XML

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.view.fragments.home.calibrateAndRepair.CalibrateRepairMessageFragment">

    ... some other stuff

    <!-- Included the button -->
    <include
        android:id="@+id/calibrate_repair_btn"
        layout="@layout/calibrate_repair_btn"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

用于数据绑定的 BaseFragment …

android android-fragments kotlin dagger-hilt

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

如果发生异常,流程是否取消

我正在 kotlin 中尝试一些流程,并问自己一个问题:如果流程中的其中一个操作抛出异常,即使我使用 .catch,我的流程也会被取消吗?

如果没有,即使在使用 .catch 时发生异常,如何取消流程?

例子

fun testFlow() = flow {
   emit("Test")
   emit(Exception("Error"))
   emit("Test2") // This should not be emitted
}.catch { e -> println("Showing UI $e") }
Run Code Online (Sandbox Code Playgroud)

另一个例子

fun testFlow2() = flow {
   emit("Test")
   throw Exception("Error")
   emit("Test2") // This should not be emitted
}.catch { e -> println("Showing UI $e") }
Run Code Online (Sandbox Code Playgroud)

kotlin kotlin-coroutines kotlin-flow

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

何时使用 Kotlin 协程来优化代码性能

目前,我正在尝试 kotlin 协程,我问自己一个问题:使用协程时是否有显着的性能提升?让我们看一些(理论)例子:

例一

val myUnsortedList = listOf(1, 2, 5, 6, 3, 10, 100)
fun doStuffWithSorted(list: List<Int>) { ... }

// Without coroutine
val sortedList = myUnsortedList.sorted()
doStuffWithSorted(sortedList)

coroutineScope {
   launch {
       val sortedList = myUnsortedList.sorted()
       doStuffWithSorted(sortedList)
   }
}
Run Code Online (Sandbox Code Playgroud)

示例二

fun doSomeHeavyOperations() { // doing heavy Operations but non blocking }

fun main() { doSomeHeavyOperations() }

//////////////// VERSUS //////////////////////

suspend fun doSomeHeavyOperations() { // doing heavy Operations but non blocking }

suspend fun main() {
    coroutineScope {
       launch {
         doSomeHeavyOperations() …
Run Code Online (Sandbox Code Playgroud)

android kotlin kotlin-coroutines

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

Android:匕首柄,注入导航组件

我正在尝试为我的 navController 提供匕首柄。但我使用的方法不起作用。我想提供 navController 以便通过构造函数注入将其注入我的片段中。

没有 Di.Module、FragmentClass

private val navController by lazy { findNavController() }
private val appBarConf by lazy { AppBarConfiguration(navController.graph) }
Run Code Online (Sandbox Code Playgroud)

目前的方法,Di.Module

@Module
@InstallIn(ApplicationComponent::class)
object AndroidModule {

@Provides
fun provideNavController(@ApplicationContext context: Context): NavController = lazy {
    (context as AppCompatActivity).findNavController(R.navigation.nav_main)
}.value

@Provides
fun provideAppbarConfiguration(navController: NavController): AppBarConfiguration = lazy {
    AppBarConfiguration(navController.graph)
}.value
}
Run Code Online (Sandbox Code Playgroud)

我还创建了 FragmentFactory 类,以便通过构造函数注入我的依赖项。我知道这(context as AppCompatActivity)是这里的问题,但我不知道正确的解决方案。

我感谢每一个帮助,谢谢!

错误

引起原因:java.lang.ClassCastException:com.example.app.App无法转换为androidx.appcompat.app.AppCompatActivity

android kotlin dagger dagger-hilt

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

像 kotlin 这样的打字稿中的条件赋值

我开始学习打字稿及其语言特征。我怀念的一件事是诸如when表达式或条件赋值之类的东西。就像是

val languange = "DE"

val test = when(languange) {
   "DE" -> "HALLO"
   "EN" -> "HELLO"
   else -> "NONE"
}
Run Code Online (Sandbox Code Playgroud)

我发现在打字稿中实现这一点的唯一方法是:

const language = "DE"

var description: String;

if (language == "DE") {
   description = "HALLO"
} else if (language == "EN") {
   description = "HELLO"
}
Run Code Online (Sandbox Code Playgroud)

难道没有更方便的方法来实现这个吗?

javascript typescript

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