经过长时间的调试和代码重构,我想重新运行一些测试。我遇到的问题是我总是收到以下错误:
"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) 我正在尝试使用 kotlin 协程,我问自己,如何在同一个挂起函数中执行多项工作(例如同时调用网络和本地数据库)。研究这个问题使我得到了以下解决方案:
suspend fun doWorkInParallel() {
coroutineScope {
val networkCall = async { // stuff }
val databaseCall = async { // stuff }
awaitAll(networkCall, databaseCall)
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
networkCall当和 访问databaseCall同一个对象/更改同一个对象时会发生什么(例如,在networkCalla 变量内部设置为State X,在 adatabaseCall变量内部设置为Stata Y)我有一个非常奇怪的问题。当我使用a从 导航Fragment 1到,然后使用后退按钮从 导航回 到 时,in不再起作用,因此无法再次导航到。Fragment 2btn.setOnClickListenerFragment 2Fragment 1btn.setOnClickListenerFragment 1Fragment 2
这是我的代码:
<?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)
<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)
我正在 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 协程,我问自己一个问题:使用协程时是否有显着的性能提升?让我们看一些(理论)例子:
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) 我正在尝试为我的 navController 提供匕首柄。但我使用的方法不起作用。我想提供 navController 以便通过构造函数注入将其注入我的片段中。
private val navController by lazy { findNavController() }
private val appBarConf by lazy { AppBarConfiguration(navController.graph) }
Run Code Online (Sandbox Code Playgroud)
@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
我开始学习打字稿及其语言特征。我怀念的一件事是诸如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)
难道没有更方便的方法来实现这个吗?
kotlin ×6
android ×5
dagger-hilt ×2
dagger ×1
javascript ×1
junit ×1
kotlin-flow ×1
typescript ×1