我不断收到错误:“未解析的引用:数据绑定”和“未解析的引用: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) 有没有办法在 Android Studio 中找到重复的(复制/粘贴代码、重复代码)Kotlin 代码?我有 Android Studio 4.0,但找不到这个“重复的代码片段”选项。
是否有任何 Android Studio 插件可以为 Kotlin 完成这项工作?
我正在使用 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 上发现了这个问题 …
我对 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) 有一个类似的问题问的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
我想屏蔽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 循环轻松完成,但我需要在正则表达式中完成。先感谢您。
我一直在开发一个应用程序,它需要将 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) 我想在某些片段中隐藏 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
我试图在 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 开发是不同的,但这些陈述对我来说似乎是矛盾的。
我正在尝试在 kotlin/android 中创建房间数据库,但是KotlinNullPointerException当我尝试从数据库中获取 LiveData 时我得到了。我有两个表Car,Refueling从一个片段我可以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) kotlin ×10
android ×7
java ×2
android-room ×1
coroutine ×1
dao ×1
data-binding ×1
exoplayer2.x ×1
gradle ×1
jvm ×1
mockk ×1
plugins ×1
regex ×1
sqlite ×1
video-player ×1