Tag: Java

尽管使用RxJava在另一个线程上订阅,但在使用Google的People API时仍然收到IllegalStateExceptionexception

注意:我使用Kotlin和RxKotlin来实现有用的扩展function。 我正在尝试使用Google的People API获取一些用户数据,并且将所有的AsyncTasks和东西都移植到了RxJava中。 一切工作除了这部分: private fun getGooglePerson(service: PeopleService?, account: GoogleSignInAccount) = Single.just(service?.people() ?.get(“people/me”) ?.setPersonFields(“emailAddresses,birthdays,genders,phoneNumbers”) ?.execute() ?: Person()) // If null, return an empty person (shouldn’t ever be null, though) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribeBy( onError = {/*Do something*/}, onSuccess = {/*Do something*/} ) 具体来说,我得到一个IllegalStateException的消息, Calling this from your main thread can lead to deadlock 。 我感到困惑,因为我的印象是,调用subscribeOn应该将其上下的所有东西(除非一个observeOn遵循它)转移到另一个线程(在这种情况下, Schedulers.io() […]

Mockitounit testing:在一个类的所有方法调用中,返回“true”

我在kotlin SmsHandler有一个类,使用一个方法determineFiltersPass调用另一个类SmsSendingFilters : class SmsHandler(val filterPredicates: SmsSendingFilters) { fun determineFiltersPass(sms: SmsDto): Boolean = with(sms.filters) { var pass = true for (filter in FiltersDto::class.memberProperties) pass = when (FilterType.valueOf(filter.name.toUpperCase())) { UNIQUE -> if (filter.get(sms.filters) != null) { val unique = filter.get(sms.filters) as Boolean pass && if (unique) filterPredicates.isUnique().test(sms) else true } else pass && true RECENT -> […]

为什么这个Kotlin方法附加反引号?

以下代码段中使用的反引号是什么? 为什么添加他们的fun is(amount:Int ):Boolean { … } ? verifier.`is`(amount)

如何阅读Chronicle队列中的最后N个记录?

我有以下代码从Chronicle队列中读取(它是用Kotlin编写的,但没关系): val queue = ChronicleQueueBuilder.single(path).build() val tailer = queue.createTailer() tailer.toEnd() // // This code is wrong // val lastIndex = tailer.index() // // val shift = lastIndex – 10 // if (shift > 0) { // tailer.moveToIndex(lastIndex) // } while (true) { val text = await(tailer) if (prefix == null) { println(text) } else { […]

Android Access在建设时被拒绝

我最近把我的项目切换到Kotlin,并检查了我发现的所有预编译错误。 然后我去建立该项目,我收到这个错误。 错误:执行任务’:app:transformResourcesWithMergeJavaResForDebug’失败。 java.io.FileNotFoundException:D:\ Work \ known-tek \ Knew_Tek \ app \ build \ intermediates \ transforms \ mergeJavaRes \ debug \ 0 \ META-INF \ LICENSE(Access is denied) 我正在使用Android Studio 3.0 ,这真的是新的,但从我可以告诉这不应该发生。 我已经深入到文件结构,并确认该文件夹确实存在。 唯一的例外是LICENSE文件夹是小写而不是上部。 我不相信这会影响任何事情,但我可能是错的。

在RxKotlin / RxJava中用BehaviorSubject自动创建热可观察对象

目前我正在使用RxKotlin在Kotlin上建立一个项目。 我与Rx的背景主要是基于RxJS。 我经常用于在Typescript中创建hot observables模式的模式看起来是这样的: private dataStore: IFoo; private dataStoreSubject: BehaviorSubject = new BehaviorSubject(this.dataStore); public dataStoreObservable: Observable = Observable.from(this.dataStoreSubject); public getNetworkData(): Observable { return this.http.get() .map((response: IResponse) => { this.dataStore = response; this.dataStoreSubject.next(this.dataStore); return this.dataStore; }); } 这将允许我暴露一个Observable ,而不暴露Subject和后续的subject.next(); 方法。 我的问题是:在RxKotlin或RxJava中建立类似逻辑最常用的方法是什么?

Docker化Springboot应用程序

上下文:这是一个用Kotlin编写的应用程序,并使用Maven的Spring引导。 基本上,我想知道我在做什么。 运行mvn install然后用相应的jar文件创建target文件夹。 因此,Dockerfile将只是将jar文件复制到容器的工作目录中,然后运行java -jar WHATEVER.jar 。 简单的Dockerfile FROM openjdk:8-jre-alpine COPY target/app-DEV-SNAPSHOT.jar . EXPOSE 8089 CMD [“java”, “-jar”, “./app-DEV-SNAPSHOT.jar”] 但是我想说,使用多级构建对我来说更有意义,并且在第一阶段生成jar文件,并在第二阶段执行它。 我试过这个第二种方法,但是我面临着一个与main class doesn’t exist 多阶段Dockerfile: FROM maven:3.5.2-jdk-8-alpine as BUILD ENV APP_HOME=/usr/src/service COPY ./src /usr/src/service COPY pom.xml /usr/src/service WORKDIR /usr/src/service RUN mvn install FROM openjdk:8-jre-alpine COPY –from=BUILD /usr/src/service/target/app-DEV-SNAPSHOT.jar ./ EXPOSE 8080 CMD [“java”, “-jar”, “./app-DEV-SNAPSHOT.jar”] […]

禁止使用方法或类的“使用属性访问语法”

在我的项目中,我有一个委托(用Java编写)用于通过RPC获取数据,其中大部分方法以“get”开始,一些不需要参数,所以Kotlin建议用属性访问语法替换对它们的调用,而不是实现属性语义(当然,因为他们执行网络请求),所以我想在默认情况下禁止所有这些方法的检查,而不是每个调用的地方(是的,我知道@Suppress注释块,它和我所需要的完全相反)。 有没有任何解决方案,除了重命名,所以他们不会以“得到”开始?

JNI GetShortArrayElements失败,SIGSEGV SEGV_ACCERR

我在托管代码中创建了一个缓冲区: var nativeBuffer = ShortArray(bufferSize) 这是Kotlin代码,但是根据stdlib文档 ,这个语法实际上是一个返回short []的包装器。 然后我想使用JNI从C ++写入这个缓冲区: JNIEXPORT void JNICALL Java_package_class_name_readNext (JNIEnv * env, jclass clazz, jshortArray javaArray) { jboolean * isCopy; short * targetArray = env->GetShortArrayElements(javaArray, isCopy); // Do stuff to targetArray } 问题是GetShortArrayElements调用总是导致崩溃,并使用以下逻辑删除: 11-07 21:23:53.610 86-86/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** […]

为什么有可能调用kotlin的构造函数的默认参数,但不是一个方法?

我很好奇为什么有可能调用kotlin的构造函数与默认参数,而不是从java代码的方法? 例如: class Test(val test: String = “”) Java客户端: void test() { new Test(); } 没关系。 但是如果我想用方法做同样的技巧,这是不可能的: class Test { fun x(x: Int = 5) { } } Java客户端,编译错误: void test() { new Test().x(); } 在我看到的方法反编译为java字节码 X $默认 方法。 它是静态的,我不能从Java调用它(想法不允许我这样做)。 而且只有添加了 @JvmOverloads 使用默认arg的kotlin方法的注解创建了一个可从java端访问的方法。 问题是为什么有两种方法如何从java调用kotlin的默认值? 为什么不做一切可以访问/默认情况下不可访问? 这是一个糟糕的设计,还是有这个严肃的理由?