小编Mor*_*zov的帖子

来自Espresso中不正确线程的领域访问

在每次浓缩咖啡测试之前,我都有一个注释@Before,用于初始化RealmManager.realm

我的代码段object Realm

init {
    Realm.init(SaiApplication.context)
    val builder = RealmConfiguration.Builder().schemaVersion(SCHEMA_VERSION)
    builder.migration(runMigrations())
    if (!BuildConfig.DEBUG) builder.encryptionKey(getOrCreateDatabaseKey())
    if (SaiApplication.inMemoryDatabase) builder.inMemory()
    Realm.setDefaultConfiguration(builder.build())
    try {
        errorOccurred = false
        realm = Realm.getDefaultInstance()
    } catch (e: Exception) {
        errorOccurred = true
        realm = Realm.getInstance(RealmConfiguration.Builder()
                .schemaVersion(SCHEMA_VERSION).name(errorDbName).build())
        e.log()
        deleteRealmFile(realm.configuration.realmDirectory)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行测试时,出现下一个错误:

来自错误线程的领域访问。只能在创建对象的线程上访问领域对象

那么,如何在测试中正确初始化自己的境界?

我发现很有趣的解决方案之一,是创建一个虚假的init领域。

multithreading android realm kotlin android-espresso

5
推荐指数
2
解决办法
376
查看次数

如何在 androidx.appcompat 中创建 AlertDialog

有下一个导入:

import androidx.appcompat.app.AlertDialog
Run Code Online (Sandbox Code Playgroud)

并创建对话框如下:

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val adb = AlertDialog.Builder(activity!!)
                .setTitle(R.string.actions_rename_connection)
                .setPositiveButton(R.string.actions_ok, this)
                .setNegativeButton(R.string.actions_cancel, this)
        val view = LayoutInflater.from(activity).inflate(R.layout.dialog_edit_name, null)
        val dialog = adb.setView(view).create()
        dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
        return dialog
    }
Run Code Online (Sandbox Code Playgroud)

但我并不满意activity!!

例如,使用另一个导入我创建对话框如下:

import android.app.AlertDialog

 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return AlertDialog.Builder(activity, R.style.MaterialThemeDialog)
                .setTitle(R.string.in_app_settings_language)
                .setPositiveButton(R.string.actions_ok) { _, _ -> presenterContract.onOkClick() }
                .setNegativeButton(R.string.actions_cancel) { _, _ -> closeView() }
                .create()
    }
Run Code Online (Sandbox Code Playgroud)

问:我们可以activity在 androidx 中使用一些解决方案吗?

android android-alertdialog kotlin androidx

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

用于同步的空引用(monitor-enter)

当我关闭互联网连接并从 Firebase 应用注销时,我无法退回我的应用。

还得到下一个错误:

2019-11-05 20:26:19.364 5593-5611/com.mandarine.target_list E/System:
    Uncaught exception thrown by finalizer 2019-11-05 20:26:19.3655593-5611/com.mandarine.target_list E/System:
java.lang.NullPointerException: Null reference used for synchronization (monitor-enter)
        at com.android.org.conscrypt.ConscryptFileDescriptorSocket.finalize(ConscryptFileDescriptorSocket.java:1053)
        at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:252)
        at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:239)
        at java.lang.Daemons$Daemon.run(Daemons.java:105)
        at java.lang.Thread.run(Thread.java:764)
Run Code Online (Sandbox Code Playgroud)

它仅在我关闭 Internet 时发生。

我也发现了这个:https : //github.com/google/conscrypt/blob/master/common/src/main/java/org/conscrypt/ConscryptFileDescriptorSocket.java#L1079

但真的不知道该怎么做必须得到

我也做了/gradlew app:androidDependencies并得到:

> releaseUnitTestRuntimeClasspath - Dependencies for runtime/packaging
> +--- org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.3.50@jar
> +--- org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50@jar
> +--- com.firebaseui:firebase-ui-auth:4.3.1@aar
> +--- androidx.navigation:navigation-ui-ktx:2.0.0@aar
> +--- androidx.navigation:navigation-ui:2.0.0@aar
> +--- com.google.android.material:material:1.0.0@aar
> +--- me.zhanghai.android.materialprogressbar:library:1.4.2@aar
> +--- androidx.appcompat:appcompat:1.0.2@aar
> +--- androidx.constraintlayout:constraintlayout:1.1.3@aar
> +--- …
Run Code Online (Sandbox Code Playgroud)

android garbage-collection finalizer nullpointerexception kotlin

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

如何重现或解决KeyStoreException?

出现以下描述的崩溃:

由 java.security.UnrecoverableKeyException 引起:无法在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:263) 处获取 X.509 形式的公钥 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java: 303) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:324) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:388) 在 android.security.keystore.AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java :105)在java.security.KeyStore.getKey(KeyStore.java:1062)在com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.getKeyPair(KeyStoreManager.java:117)在com.mandarine.sai.sdk。 tools.keystore.KeyStoreManager.deleteKeyPairs(KeyStoreManager.java:222) 位于 com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:73) 位于 com.mandarine.sai.features.authorizations.common。 ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:41) 在 com.mandarine.sai.features.authorizations.list.AuthorizationsListViewModel.(AuthorizationsListViewModel.java:79) 在 com.mandarine.sai.app.ViewModelsFactory.create(ViewModelsFactory.java:102 )

KeyStoreException:无效的密钥 blob

由 android.security.KeyStoreException 引起:android.security.keystore.getKeyStoreException(KeyStore.java:1301) 处的 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePublicKeyFromKeystore(AndroidKeyStoreProvider.java:265) 处的密钥 blob 无效。 AndroidKeyStoreProvider.loadAndroidKeyStoreKeyPairFromKeystore(AndroidKeyStoreProvider.java:303) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStorePrivateKeyFromKeystore(AndroidKeyStoreProvider.java:324) 在 android.security.keystore.AndroidKeyStoreProvider.loadAndroidKeyStoreKeyFromKeystore(AndroidKeyStoreProvider.java:388) 在 android.security.keystore .AndroidKeyStoreSpi.engineGetKey(AndroidKeyStoreSpi.java:105) 在 java.security.KeyStore.getKey(KeyStore.java:1062) 在 com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.getKeyPair(KeyStoreManager.java:117) 在com.mandarine.sai.sdk.tools.keystore.KeyStoreManager.deleteKeyPairs(KeyStoreManager.java:222) 位于 com.mandarine.sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:73) 位于 com.mandarine。 sai.features.authorizations.common.ConnectionKeyBuilderKt.collectConnectionsAndKeys(ConnectionKeyBuilderKt.java:41) 在 com.mandarine.sai.features.authorizations.list.AuthorizationsListViewModel.(AuthorizationsListViewModel.java:79) 在 com.mandarine.sai.app.ViewModelsFactory .create(ViewModelsFactory.java:102) 在 androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:187) 在 androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150) 在 com.mandarine.sai.features.authorizations。 list.AuthorizationsListFragment.setupViewModel(AuthorizationsListFragment.java:119)在com.mandarine.sai.features.authorizations.list.AuthorizationsListFragment.onCreate(AuthorizationsListFragment.java:65)在androidx.fragment.app.Fragment.performCreate(Fragment.java:第2684章)

这是代码:

fun collectConnectionsAndKeys(
    repository: ConnectionsRepositoryAbs,
    keyStoreManager: KeyStoreManagerAbs
): Map<ConnectionID, ConnectionAndKey> {
    return …
Run Code Online (Sandbox Code Playgroud)

crash android kotlin crashlytics

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

Preview Hilt 不支持创建 ViewModel

我有下一个屏幕:

@ExperimentalMaterialApi
@Composable
fun AccountListScreen(
    navController: NavController,
    viewModel: AccountListViewModel = hiltViewModel()
) {
Run Code Online (Sandbox Code Playgroud)

我想预览这个屏幕。

我正在尝试按以下方式执行此操作:

@ExperimentalMaterialApi
@Preview(showBackground = true, backgroundColor = 0xFFFFFF, showSystemUi = true)
@Composable
fun AccountListScreenPreview() {
    AccountListScreen(
        navController = rememberNavController(),
        viewModel = hiltViewModel()
    )
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,我在尝试构建预览时收到以下错误:

java.lang.IllegalStateException:预览版不支持 ViewModels 创建

如何解决这个问题呢?这也是我的一些课程的代码

android kotlin android-jetpack-compose dagger-hilt

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

如何在 ktlint 中禁用文件名?

如何以及在哪里可以禁用 ktlint 中的文件名?

我不想重命名这个类,但得到下一个错误:

接口 MainActivityContract 应在名为 MainActivityContract.kt 的文件中声明(不能自动更正)

android gradle android-gradle-plugin editorconfig

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

为什么 setDecorFitsSystemWindows 不起作用?

在我的活动中,我尝试调用该方法,但 Android Studio 没有看到该方法

WindowCompat.setDecorFitsSystemWindows(window, false)
Run Code Online (Sandbox Code Playgroud)

我也使用这个导入:

import androidx.core.view.WindowCompat
Run Code Online (Sandbox Code Playgroud)

android kotlin

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

如何正确等待动画结束?

lottie我知道我可以使用 跟踪动画完成的时刻progress。但问题是我想在动画完全完成的那一刻开始一个新的屏幕。

这是我的动画的代码

@Composable
fun AnimatedScreen(
    modifier: Modifier = Modifier,
    rawId: Int
) {
    Box(
        contentAlignment = Alignment.Center,
        modifier = modifier.fillMaxSize()
    ) {
        val compositionResult: LottieCompositionResult = rememberLottieComposition(
            spec = LottieCompositionSpec.RawRes(rawId)
        )
        AnimatedScreenAnimation(compositionResult = compositionResult)
    }
}

@Composable
fun AnimatedScreenAnimation(compositionResult: LottieCompositionResult) {

    val progress by animateLottieCompositionAsState(composition = compositionResult.value)

    Column {
        if (progress < 1) {
            Text(text = "Progress: $progress")
        } else {
            Text(
                modifier = Modifier.clickable { },
                text = "Animation is done"
            )
        }
        LottieAnimation(
            composition …
Run Code Online (Sandbox Code Playgroud)

android android-animation lottie android-jetpack-compose

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

如何从youtube获取缩略图

youtube中视频的缩略图

我想添加从视频添加图像的功能,我在我的方法useLinkInput中获得.

现在我有一个对话框,其中有下一个代码:

 public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            Toast.makeText(getContext(), "??", Toast.LENGTH_SHORT).show();
            String string = input.getText().toString();
            useLinkInput(string);
        }
Run Code Online (Sandbox Code Playgroud)

方法useLinkInput:

private void useLinkInput(String input) {
    Uri uri = Uri.parse(input);
    String videoID = uri.getQueryParameter("v");
    url = "http://img.youtube.com/vi/" + videoID +"/0.jpg";
    Log.d("url",url);
}
Run Code Online (Sandbox Code Playgroud)

当用户在对话框中粘贴链接并按下确定时,我会进入日志图像:

D/url: http://img.youtube.com/vi/null/0.jpg
Run Code Online (Sandbox Code Playgroud)

但他是空的*(没有显示图像)

java youtube android

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

如何修复 build.gradle?

连接我的模块并在build.gradle接下来写:

plugins {
    id("org.jlleitschuh.gradle.ktlint")
    kotlin("jvm")
}

dependencies {
    compileOnly(kotlin("stdlib"))
    compileOnly(kotlin("reflect"))
    compileOnly(kotlin("script-runtime"))
    compileOnly("com.pinterest.ktlint:ktlint-core:0.34.2")
}
Run Code Online (Sandbox Code Playgroud)

并得到下一个错误:

启动失败:构建文件“/home/vadimm/AndroidStudioProjects/homework/target-list/custom_ktlint_rules/build.gradle”:3:插件{}脚本块中只允许调用 id(String) 方法

有关 plugins {} 块的信息,请参阅 https://docs.gradle.org/5.1.1/userguide/plugins.html#sec:plugins_block

@ 第 3 行,第 5 列。kotlin("jvm") ^

1 错误

也试过这样写: apply plugin: 'kotlin'

plugins {
    id 'kotlin'
}
Run Code Online (Sandbox Code Playgroud)

但它没有成功

android build.gradle android-gradle-plugin

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

如何为形状添加高程?

现在我有下一个矩形:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="28dp" />

    <gradient
        android:endColor="#FFFFFF"
        android:gradientRadius="20dp"
        android:startColor="#FFFFFF"
        android:type="linear" />

    <size
        android:width="106dp"
        android:height="106dp" />

    <stroke
        android:width="1dp"
        android:color="#0189ff" />
</shape>
Run Code Online (Sandbox Code Playgroud)

并得到下一个结果:

在此输入图像描述

问:如何添加阴影/高程而不是描边?

xml android shapes android-elevation

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

如何退出带有分支列表的编辑器/寻呼机?

我在终端(iTerm)中打开了一个分支列表,然后我不知道在当前情况下如何才能转到当前分支。

在此输入图像描述

更新

问题是要退出这些分支的列表,也就是关闭这个编辑器

git macos git-branch iterm2

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