切换到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) 以下Kotlin代码:
val x = null + null
Run Code Online (Sandbox Code Playgroud)
结果x
是类型String
,这是正确的,根据文档String.plus
:
将此字符串与给定[other]对象的字符串表示形式连接起来.如果receiver或[other]对象为null,则表示为字符串"null".
但是,我不明白为什么会发生这种情况 - 是否是由于该语言的一些特殊功能?
我将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()
之后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) 我滚动浏览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.
迁移到时,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) 我有一个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
我如何在Android Studio 3.0中取消选中/禁用快照?
在Android Virtual Device Manager
遗失的领域 - Snapshot
.之前的这种选择是当你试图编辑你的Virtual Device
.
更新了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) 在每次浓缩咖啡测试之前,我都有一个注释@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领域。