标签: kotlin

未解决的参考数据绑定 - Android Studio 4.0

我不断收到错误:“未解析的引用:数据绑定”和“未解析的引用:ActivityMainBinding”。
我使用的是 Android Studio 4.0,Android Gradle 插件版本:4.0.0 和 Gradle 版本 6.1.1。

build.gradle(模块:app):

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        applicationId "com.example.twowaydatabinding"
        minSdkVersion 24
        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'
        }
    }

    buildFeatures {
        dataBinding = true
        viewBinding = true
    }
}

dependencies {
    def lifecycle_version = "2.2.0"

    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation …
Run Code Online (Sandbox Code Playgroud)

data-binding android gradle kotlin android-studio

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

在 Android Studio 中查找重复代码 (Kotlin)

有没有办法在 Android Studio 中找到重复的(复制/粘贴代码、重复代码)Kotlin 代码?我有 Android Studio 4.0,但找不到这个“重复的代码片段”选项。

是否有任何 Android Studio 插件可以为 Kotlin 完成这项工作?

plugins android code-duplication kotlin android-studio

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

Exoplayer2.x:Player.STATE_ENDED 在视频结束时触发两次,如何在 android 中实现 exoplayer?

我正在使用 Exoplayer 在播放列表中播放视频。我想在当前视频结束时自动播放下一个视频。为此,我EventListener在播放器中添加了一个。这是一个片段:

private val videoPlayerListener = object: Player.EventListener {
    override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
        when(playbackState) {
            Player.STATE_IDLE -> showLoadingView()
            Player.STATE_READY -> hideLoadingView()
            Player.STATE_BUFFERING -> showVideoProgressWheel()
            Player.STATE_ENDED -> {
                Log.d(TAG, "fired")
                playNextVideo()
            }
        }
    }

    override fun onPlayerError(error: ExoPlaybackException?) {
        // handle error event
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我的日志显示Player.STATE_ENDED触发了两次。连锁效应是我的播放列表从

视频 1 -> 视频 3 -> 视频 5 -> 视频 7...

代替

视频 1 -> 视频 2 -> 视频 3 -> 视频 4...

我做了一些研究,我在 Github 上发现了这个问题 …

android kotlin video-player exoplayer2.x

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

为什么 Kotlin 提交比 Java 慢得多?

我对 Kotlin 很陌生。所以为了练习,我尝试用它来解决 LeetCode 中的问题。这是我今天解决的一个问题:
Distinct Subsequence(Leetcode)
首先我尝试用 Java 解决这个问题:

class Solution {
    public int numDistinct(String s, String t) {
        int[][] dp = new int[t.length() + 1][s.length() + 1];
        for (int i = 0; i <= s.length(); i++) {
            dp[0][i] = 1;
        }
        for (int i = 1; i <= t.length(); i++) {
            for (int j = 1; j <= s.length(); j++) {
                if (t.charAt(i - 1) != s.charAt(j - 1)) {
                    dp[i][j] = dp[i][j - 1];
                } else { …
Run Code Online (Sandbox Code Playgroud)

java kotlin

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

如何使用 mockk 模拟 ObjectMapper.readValue()

有一个类似的问题问的Mockito这里

我有一种情况,我想readValue在以下行中模拟

 val animal: Animal = objectMapper.readValue(String(message.body))
Run Code Online (Sandbox Code Playgroud)

我试过

@Test
fun `test you filthy animal`() {
    val animal = Animal("bird")

    every {
        objectMapper.readValue(any<String>())
    } returns animal
}
Run Code Online (Sandbox Code Playgroud)

...但我不断收到以下错误:

Not enough information to infer type variable T

我一直在挠头,试图在Mockk弄清楚

kotlin junit-jupiter mockk

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

Kotlin / Regex - 用重复字符替换一组模式

我想屏蔽maskEmail函数中传递的电子邮件。我目前面临一个问题,其中当我替换模式的第 2 组和第 4 组时星号*不重复

这是我的代码:

fun maskEmail(email: String): String {
    return email.replace(Regex("(\\w)(\\w*)\\.(\\w)(\\w*)(@.*\\..*)$"), "$1*.$3*$5")
}
Run Code Online (Sandbox Code Playgroud)

这是输入:

tom.cat@email.com
cutie.pie@email.com
captain.america@email.com
Run Code Online (Sandbox Code Playgroud)

这是该代码的当前输出:

t*.c*@email.com
c*.p*@email.com
c*.a*@email.com

Run Code Online (Sandbox Code Playgroud)

预期输出:

t**.c**@email.com
c****.p**@email.com
c******.a******@email.com
Run Code Online (Sandbox Code Playgroud)

编辑:我知道这可以用 for 循环轻松完成,但我需要在正则表达式中完成。先感谢您。

regex kotlin

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

如何在 CameraX 预览上设置一个框,以便在 Java 中使用 ImageAnalysis 进行处理?

我一直在开发一个应用程序,它需要将 CameraX 用于它的预览流,但它也需要一种用于解码文本的框式叠加层。我已经成功地实现了预览,但似乎无法找到一种方法来实现一个覆盖,在不使用任何第三方应用程序的情况下,文本将被解码。现在我们可以从整个屏幕解码文本。我在 Codelabs 教程(链接)中看到了一个代码,它就是这样做的,但它在 Kotlin 中,我无法破译这个复杂的 Kotlin 代码。如果有人可以在不使用第三方库的情况下帮助我做到这一点,那就太好了。提前致谢。

我的 XML 代码:

<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="match_parent"
android:layout_height="675dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
Run Code Online (Sandbox Code Playgroud)

我的相机逻辑:

PreviewView mCameraView;
Camera camera;
void startCamera() {
  mCameraView = findViewById(R.id.previewView);

  cameraProviderFuture = ProcessCameraProvider.getInstance(this);

  cameraProviderFuture.addListener(() -> {
      try {
          ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
          bindPreview(cameraProvider);
      } catch (ExecutionException | InterruptedException e) {
          // No errors need to be handled for this Future.
          // This should never be reached.
      }
  }, ContextCompat.getMainExecutor(this));
}



void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {


  Preview preview = new …
Run Code Online (Sandbox Code Playgroud)

java android kotlin firebase-mlkit android-camerax

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

在片段中隐藏底部导航视图

我想在某些片段中隐藏 bottomNavigationView。

我试过下面的代码,但它有闪烁的效果。(bottomNavigationView 在 nextFragment 变得可见之前隐藏。

    val navController = this.findNavController(R.id.nav_host_home)
    navController.addOnDestinationChangedListener { _, destination, _ ->
    when (destination.id) {
        R.id.searchArticlesFragment -> bnvMain.visibility = View.GONE
        R.id.articleFragment -> bnvMain.visibility = View.GONE
            else -> bnvMain.visibility = View.VISIBLE
        }
    }
Run Code Online (Sandbox Code Playgroud)

我也试过另一个代码。但它会调整片段的大小。并在目标片段中给出 OutOfMemoryException。

    supportFragmentManager.registerFragmentLifecycleCallbacks(object :
        FragmentManager.FragmentLifecycleCallbacks() {
        override fun onFragmentViewCreated(
            fm: FragmentManager,
            f: Fragment,
            v: View,
            savedInstanceState: Bundle?
        ) {
            when (f) {
                is SearchArticlesFragment -> bnvMain.visibility = View.GONE
                is ArticleDetailsFragment -> bnvMain.visibility = View.GONE
                else -> bnvMain.visibility = View.VISIBLE
            }
        }
    }, true)
Run Code Online (Sandbox Code Playgroud)

请帮助我如何以正确和最好的方式隐藏底部导航视图?这是我可以隐藏底部导航视图的唯一方法吗?youtube …

android android-fragments kotlin android-navigation android-bottomnav

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

Kotlin 的启动是在主线程还是后台线程中启动协程?

我试图在 Android 的后台运行一个任务,我想知道我是否需要指定GlobalScope.launch(Dispatchers.IO) { ... }或者一个简单的GlobalScope.launch { ... }就足够了。我担心的是第二种形式是在主线程还是后台/IO 线程中启动协程?


根据Android 文档

launch不带Dispatchers.IO参数。当您不传递 aDispatcher来启动时,任何从viewModelScope 运行启动的协程都在主线程中运行

根据Kotlin 文档

在 GlobalScope 中启动协程时使用的默认调度程序由 Dispatchers.Default 表示并使用共享的线程后台池,因此launch(Dispatchers.Default) { ... }使用与GlobalScope.launch { ... }.

我知道协程直到最近才处于试验阶段,Android-Kotlin 与纯 Kotlin 开发是不同的,但这些陈述对我来说似乎是矛盾的。

android jvm coroutine kotlin kotlin-coroutines

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

尝试获取 LiveData 时,数据库查询抛出 KotlinNullPointerException

我正在尝试在 kotlin/android 中创建房间数据库,但是KotlinNullPointerException当我尝试从数据库中获取 LiveData 时我得到了。我有两个表CarRefueling从一个片段我可以Car毫无问题地获取数据,但在第二个片段中,我在尝试获取RefuelingLiveData 时出错。我找不到这两个片段/DAO 之间的任何区别。下面是一个简化的代码。

加油数据类:

@Entity(tableName = "refueling_table", foreignKeys = [ForeignKey(entity = Car::class,
    parentColumns = arrayOf("carID"),
    childColumns = arrayOf("carID"),
    onDelete = ForeignKey.CASCADE)]
)
data class Refueling(
    @PrimaryKey(autoGenerate = true)
    val refuelingID: Long = 0L,

    @ColumnInfo(name = "carID")
    val carID: Long = 0L,
)
Run Code Online (Sandbox Code Playgroud)

加油DAO:

@Dao
interface RefuelingDAO
{
    @Query("SELECT * FROM refueling_table ORDER BY refuelingID DESC")
    fun getAll(): LiveData<List<Refueling>>
}
Run Code Online (Sandbox Code Playgroud)

应用数据库:

@Database(entities = [Car::class, Refueling::class], version = …
Run Code Online (Sandbox Code Playgroud)

sqlite android dao kotlin android-room

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