Tag: kotlin

为什么我的RxJava设置阻止我的UI线程? 使用BluetoothAdapter.startLeScan回调

我正在努力寻找阻止我的UI线程的具体行动,我已经尝试了几个调度运算符,但我不知道如何使其工作。 我有一个用户界面的按钮,这onClicked是开始蓝牙扫描和更新textView字符串像一个日志(它显示了在这一刻发生的事情)。 所以这是我的MainActivity: lateinit var disposable: Disposable val textDataService = TextDataService() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_scan_test) buttonScanTestStart.setOnClickListener { if (isBluetoothEnabled()) { textViewLog.text = “” buttonScanTestStop.visibility = View.VISIBLE buttonExportScanTestRaportSummary.visibility = View.GONE buttonExportScanTestRaportFull.visibility = View.GONE buttonScanTestStart.visibility = View.GONE disposable= Scanner() .discoverSingleDevice(this, ” “, textViewLog) .doOnError { setText(“General error: ${it.message ?: it::class.java}”, textViewLog) setLogText(“General error: ${it.message […]

无法导入swig生成的包

我正在尝试使用swig为c ++类生成java包装(所以我可以在Kotlin中使用它们)。 我能够生成Java类和JNI共享模块,但是我有问题导入包中的想法。 这是我做的。 首先我使用下面的代码生成封装代码: ../../swig/bin/swig -module wvx -c++ -java -package wvx -outdir out java_interface.i 编译它使用: gcc -shared -fpic -c java_interface_wrap.cxx -I. -I/bunch-of-paths 链接使用: g++ -lpthread -lrt -lgmp -ldl -lcrypt -lm -lc -lieee -shared -fpic java_interface_wrap.o bunch_of_dependencies.a -o libwvx.so 我现在有libwvx.so文件,我可以加载目录到我的LD_LIBRARY_PATH后加载 System.loadLibrary(“wvx”) 接下来,我进入了所有的swig生成的java文件的出口目录,并编译所有使用。 javac *.java 并用下列方法将它们打包成一个jar子 jar cf wvx.jar *.class 最后在我包含的build.gradle文件中。 dependencies { compile files(‘/path_to_jar/wvx.jar’) } […]

为什么线程显示比协程更好的性能?

我写了3个简单的程序来测试协程在线程上的性能优势。 每个程序都做了很多简单的计算。 所有的程序都是分开运行的。 除了执行时间外,我还通过Visual VM IDE插件测量了CPU的使用情况。 第一个程序使用1000-threaded池进行所有计算。 由于频繁的上下文更改, 64326 ms代码显示了最差的结果( 64326 ms ) val executor = Executors.newFixedThreadPool(1000) time = generateSequence { measureTimeMillis { val comps = mutableListOf<Future>() for (i in 0..1_000_000) { comps += executor.submit { computation2(); 15 } } comps.map { it.get() }.sum() } }.take(100).sum() println(“Completed in $time ms”) executor.shutdownNow() 第二个程序具有相同的逻辑,而不是1000-threaded池,它只使用n-threaded池(其中n等于机器内核的数量)。 它显示更好的结果( 43939 ms […]

Kotlin对象加载延迟

我有一个奇怪的问题,我有一个Android的初始登录活动,而它的onCreateMethod,被触发,我被Object类调用,这是一个名为BaseData的静态对象。 我得到一个奇怪的空错误,而它的一个对象。 发现对象在Kotlin中被延迟加载需要一段时间,我如何强制它首先加载,并在我的主登陆登录活动创建时可用。 class LoginActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { if(BaseData.userId == “”) { //At this step BaseData itself comes as null, so app goes blank //Do something } } } object BaseData : Observable() { var initialSyncDone:Boolean = false var isOffline:Boolean = true var userId: String = “” init{ // I […]

Kotlin – 如何做onCompleteListener从Firestore获取数据?

我有一个问题从Firestore中获取数据,在JavaCode中我们可以这样做: DocumentReference docRef = db.collection(“cities”).document(“SF”); docRef.get().addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { if (task.isSuccessful()) { DocumentSnapshot document = task.getResult(); if (document != null) { Log.d(TAG, “DocumentSnapshot data: ” + task.getResult().getData()); } else { Log.d(TAG, “No such document”); } } else { Log.d(TAG, “get failed with “, task.getException()); } } }); 但在Kotlin,当我尝试覆盖onComplete函数,它是不可用的。 那么,我怎样才能得到“任务”呢?

java File.createNewFile偶尔执行程序的其余部分之前抛出IOException

我有这个项目,我正在做什么,无论什么原因,每当我执行程序,并把它(我设置和所有)所需的给定参数,偶尔IOException抛出之前执行其他任何事情。 这似乎是真的,因为我到处都有伐木工人,没有人被解雇。 但是,似乎只是记录器不被解雇,因为当我看着我输出的JSON文件,它表明,它没有执行的第一步,只是没有记录器。 我是新的log4j2,所以它可能是,但我不知道(记录器不被解雇),但它似乎很奇怪,IOException应该不会发生。 因为当我在崩溃后再次执行它,它运行得很好。 (注意:这是在kotlin / jvm中,但这是关于使用JDK File类的) 这里抛出exception: https : //github.com/AlexCouch/projauto/blob/master/src/main/java/thinkingcouch/projauto/Save.kt#L114 我在使用Intellij IDEA 2017.3的MacOSX High Sierra。

从Java 6迁移到Kotlin

我有一些在Java 6和Spring应用服务器上的项目。 由于我的基础架构和治理规划的限制,我无法迁移到较新的Java 7或8。 我想我可以在这些项目中添加Kotlin,以使用function性编程等function。 这是一个很好的途径吗? 谢谢

doReturn不作为代理,但调用我的方法

我正在实施一些unit testing在我的应用程序,我有一个依赖于依赖于Application上下文。 该依赖返回一个Item列表,但我想嘲笑该逻辑返回任何我想要的。 我已经知道的区别: a) when(foo.method1()).return(bar) b) doReturn(bar).when(foo).method1() (b)不应调用该方法。 现在我有一个在ItemHelper.kt调用的方法: fun retrieveItems(): MutableList { val boxStore = BoxStore.getInstance().getBoxFor(Item::class.java) return boxStore.all } 而.getInstance()依赖于Application 。 既然我想嘲笑它,这是我的考验: class ItemHelperTests { @JvmField @Rule var mockitoRule = MockitoJUnit.rule()!! @Mock private lateinit var itemHelper: ItemHelper @Test fun itemsNumber_Test() { Mockito.doReturn(ArrayList()).`when`(itemHelper).retrieveItems() System.out.println(“this line is unreachable”) } } 但是结束调用我的代码: java.lang.Exception: Please init BoxStore.boxStore […]

Android室数据库错误:未使用的参数:在@Query函数中的天数

我正在使用Room数据库,试图在我的Dao中写入一个查询,这将删除比特定天数更早的所有记录。 这是我来到: @Query(“DELETE FROM my_table WHERE dateFrom <= date('now','-:days day')") fun deleteAllOlderThan(days: Int) 但是,当我尝试构建我的项目时,在我的Gradle控制台中出现错误: 错误:未使用的参数:天 我正在使用Kotlin,所以它也告诉我这个: 错误:任务’:nexo:kaptDebugKotlin’的执行失败。 内部编译器错误。 查看日志了解更多详情 我的查询有什么问题? UPDATE 我也收到有关转换日期的错误。 这是我的转换器: class Converter { @TypeConverter fun fromTimestamp(value: Long?) = value?.let { Date(it) } @TypeConverter fun dateToTimestamp(date: Date?) = date?.time } 我也将其添加到我的数据库与注释: @TypeConverters(Converter::class) 这是我得到的具体错误: 无法弄清楚如何将这个字段保存到数据库中。 你可以考虑为它添加一个types转换器。 e:e:private final java.util.Date dateFrom = null; 概要 我试图使用密封类的转换器在房间里,它会导致问题,所以我决定保持我的日期参数为长。 […]

未解决的参考:在Koltin写的活动GlideApp

总之我的问题是我不能在Kotlin编写的活动中使用GlideApp(生成的API)。 有趣的是,Android Studio看到的引用,我可以打开生成的GlideApp,有代码完成,但是当我尝试构建它,然后失败,“未解析的引用:GlideApp” 滑翔模块在java中实现,因为大部分的应用程序是用java编写的。 任何想法?