小编Mor*_*zov的帖子

不推荐使用androidx.test.InstrumentationRegistry

切换到AndroidX并收到已弃用:import androidx.test.InstrumentationRegistry

如果我下次导入:import androidx.test.platform.app.InstrumentationRegistry 我不能getContext()

例如: val context = InstrumentationRegistry.getContext()

在build.gradle中:

androidTestImplementation 'androidx.test.ext:junit:1.0.0-beta02'
androidTestImplementation 'androidx.test:runner:1.1.0-beta02'
Run Code Online (Sandbox Code Playgroud)

android deprecated androidx

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

为什么在Kotlin中null*null的类型是隐式String?

以下Kotlin代码:

val x = null + null
Run Code Online (Sandbox Code Playgroud)

结果x是类型String,这是正确的,根据文档String.plus:

将此字符串与给定[other]对象的字符串表示形式连接起来.如果receiver或[other]对象为null,则表示为字符串"null".

但是,我不明白为什么会发生这种情况 - 是否是由于该语言的一些特殊功能?

string nullable kotlin

32
推荐指数
2
解决办法
1952
查看次数

在 build.gradle 中找不到参数的 uploadArchives() 方法

我将gradle版本更新到了7.0.4( com.android.tools.build:gradle:7.0.4)

现在,在我的一些模块中,我正在使用 Maven解决问题。

所以我apply plugin: 'maven'更换apply plugin: 'maven-publish'

但我不明白如何正确重写这部分代码:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri("${rootProject.projectDir}/maven-repo"))
        }
    }
}

uploadArchives.dependsOn sourcesJar
Run Code Online (Sandbox Code Playgroud)

因为当我启动时,我收到以下错误:

在 org.gradle.api.Project 类型的项目“:authenticator_sdk”上找不到参数 [build_ejkqjjnby5fggiavovparsecy$_run_closure5@c0f0c25] 的方法 uploadArchives()

android gradle maven build.gradle android-gradle-plugin

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

无法获得提供者com.crashlytics.android.CrashlyticsInitProvider

之后implementation 'com.google.firebase:firebase-core:16.0.1'classpath 'com.google.gms:google-services:4.0.1'

启动应用程序时,我开始收到以下错误:

致命异常:主要进程:com.fentury.android,PID:10771 java.lang.RuntimeException:无法获取提供者com.crashlytics.android.CrashlyticsInitProvider:io.fabric.sdk.android.services.concurrency.UnmetDependencyException:此应用程序依赖在Crashlytics上.请通过https://fabric.io/sign_up注册访问,安装Android构建工具并要求团队成员邀请您加入此应用的组织.在Android.app.A活动中的android.app.ActivityThread.installContentProviders(ActivityThread.java:5445)上的android.app.ActivityThread.installProvider(ActivityThread.java:5856),android.app.ActivityThread.handleBindApplication(ActivityThread.java:5384). android.app.Loper.loop上的android.app.A.运行时,Android.app.ActivityThread $ .handleMessage(ActivityThread.java:1545)的ActivityThread.-wrap2(ActivityThread.java)位于android.os.Handler.dispatchMessage(Handler.java:102) Looper.java:154)在android.app.ActivityThread.main(ActivityThread.java:6119)的java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run( ZygoteInit.java:886)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)引起:io.fabric.sdk.android.services.concurrency.UnmetDependencyException:这个应用程序依赖于Crashlytics.请通过https://fabric.io/sign_up注册访问,安装Android构建工具并要求团队成员邀请您加入此应用的组织.at com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:235)at com.crashlytics.android.core.CrashlyticsCore.onPreExecute(CrashlyticsCore.java:209)at io.fabric.sdk.android.InitializationTask.onPreExecute (InitializationTask.java:44)at io.fabric.sdk.android.services.concurrency.AsyncTask.executeOnExecutor(AsyncTask.java:611)at io.fabric.sdk.android.services.concurrency.PriorityAsyncTask.executeOnExecutor(PriorityAsyncTask.java) :43)io.fabric.sdk.android.Kit.initialize(Kit.java:69)at io.fabric.sdk.android.Fabric.initializeKits(Fabric.java:440)at io.fabric.sdk.android. Fabric.init(Fabric.java:384)at io.fabric.sdk.android.Fabric.setFabric(Fabric.java:342)at io.fabric.sdk.android.Fabric.with(Fabric.java:313)at com .crashlytics.android.CrashlyticsInitProvider.onCreate(CrashlyticsInitProvider.java:27)位于android.app的android.content.ContentProvider.attachInfo(ContentProvider.java:1751)android.content.ContentProvider.attachInfo(ContentProvider.java:1726).ActivityThread.installProvider(ActivityThread.java:5853)......还有10个

AndroidManifest.xml在下一行添加:

<meta-data android:name="firebase_crash_collection_enabled" android:value="false" />
Run Code Online (Sandbox Code Playgroud)

android gradle firebase crashlytics android-gradle-plugin

13
推荐指数
2
解决办法
6941
查看次数

如何取消改造请求

我滚动浏览Retrofit 的官方文档,并决定在我的项目中实现类似的东西,这样用户总是可以选择取消下载文件,一切都能正常工作.实施适当的方法,如果未能规定以下内容:

service.upload1(file1, str, stringMap, new Callback<ImageUpload>() {
            @Override
            public void success(final ImageUpload imageUpload, Response response) {
                mRecyclerView.post(new Runnable() {
                    @Override
                    public void run() {
                        ...
                });
            }

            @Override
            public void failure(RetrofitError error) {
                if (error.isCanceled()) {
                    Log.e(TAG, "request is cancelled");
                } else {
                    Log.e(TAG, "other larger issue, i.e. no network connection?");
                }
            }
Run Code Online (Sandbox Code Playgroud)

但是红色的下划线是失败的方法.我不明白是什么问题,因为这个方法我们最初提出类Call(也许是因为发誓我而不是类Call是RetrofitError?)请告诉我如何修复.我使用改装1.9,我不需要继续改造2.

java android retrofit

11
推荐指数
2
解决办法
2万
查看次数

迁移到AndroidX后AppBarLayout膨胀错误

迁移到时,AndroidX我遇到了这个问题:

Java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.mandarine.android/com.mandarine.android.features.root.RootActivity}:
android.view.InflateException: Binary XML file line #18: Binary XML file line #18:
Error inflating class android.support.design.widget.AppBarLayout
Run Code Online (Sandbox Code Playgroud)

android migrate android-appbarlayout androidx

7
推荐指数
2
解决办法
4650
查看次数

AmbiguousViewMatcherException多个RecyclerViews

我有一个Fragment包含RecyclerView。但是,由于其中包含很多元素,因此Fragment我想向上滑动列表以查看并检查其中的所有元素Fragment

早期,此方法对我有帮助,但现在由于某种原因它不起作用:

Espresso.onView(ViewMatchers.withId(R.id.recyclerView)).perform(ViewActions.swipeUp())
Run Code Online (Sandbox Code Playgroud)

我的项目中有很多RecyclerView相同的id

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical"/>
Run Code Online (Sandbox Code Playgroud)

同样在测试中,我写了这样的东西:

onView(allOf( withId(R.id.recyclerView), isDisplayed()))
onView(withId(R.id.recyclerView)).perform(swipeUp())
Run Code Online (Sandbox Code Playgroud)

但是仅在第二行捕获了错误。

android.support.test.espresso.AmbiguousViewMatcherException:'with id:com.fentury.android:id/recyclerView'匹配层次结构中的多个视图。问题视图在下面标有“ **** MATCHES ****”。

android swipe android-fragments android-espresso android-recyclerview

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

如何停用快照?

我如何在Android Studio 3.0中取消选中/禁用快照?

Android Virtual Device Manager遗失的领域 - Snapshot.之前的这种选择是当你试图编辑你的Virtual Device.

android snapshot android-studio

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

从模块运行 ktlint 时出现问题

更新了ktlint,启动了任务,一切都按预期进行。

这是我的代码build.gradle

configurations {
    ktlint
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ktlint "com.pinterest:ktlint:0.34.2"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    //...another dependencies
}

repositories {
    jcenter()
}

configurations {
    ktlint
}

task ktlint(type: JavaExec, group: "verification") {
    description = "Check Kotlin code style."
    classpath = configurations.ktlint
    main = "com.pinterest.ktlint.Main"
    args "src/**/*.kt"
    // to generate report in checkstyle format prepend following args:
    // "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml"
    // see https://github.com/pinterest/ktlint#usage for more
}
check.dependsOn ktlint

task ktlintFormat(type: JavaExec, group: "formatting") {
    description …
Run Code Online (Sandbox Code Playgroud)

android android-gradle-plugin

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

来自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
查看次数