Kotlin:在unit testing中使内部函数可见

如果测试与生产代码(这是常见的)在不同的模块中,测试内部函数的可见性最好的方法是什么? 在Java中,我会将生产代码和测试放在同一个包中,并使待测试的包是私有的(另外,如果将其包含为私有的而不是私有的唯一原因,请添加@VisibleForTest注释是测试)。 不幸的是,Kotlin没有包私有的概念。

没有AsyncTask,在后台运行线程并更新UI线程

我试图从Kotlin的后台线程更新回收者视图内容。 我没有使用AsyncTask。 这里是我的代码,我想知道是否有比这更好的方法: 在我的MainActivity中,我有ProgressThread作为成员variables。 var progressThread = Thread() 然后在我想要先运行线程的方法中,我正在定义它…就像 progressThread = Thread ( Runnable { kotlin.run { try { while (i <= 100 && !progressThread.isInterrupted) { Thread.sleep(200) //Some Logic runOnUiThread { //this runs in ui thread } i++ } }catch (e:InterruptedException){ progressThread.interrupt() } } }) 之后,我开始在同样的方法 progressThread.start() 并为了阻止它,我有一个听众取消进展,并在该听众的回调,我写道: progressThread.interrupt()

解析xml kotlin android

我有这样的XML: Сегодня вас могут здорово огорчить. Если от расстройства все начнет валится из рук, просто спокойно сядьте и тихонько подождите хорошей новости. Сегодня у вас могут возникнуть проблемы на личном фронте. Спасти вас от перспективы оказаться не у дел может сухой, рациональный и в высшей степени объективный подход к проблеме. 现在我正在学习kotlin whith翻新。 我包括解析XML的库,而不是我不能理解如何创建对象来解析这个XML。 我有对象: @Root(name […]

使用RxJava发送多个请求

在Android中使用RxJava和Retrofit是非常新的。 我已经成功编写了API调用并开发了接口。 现在,我想以可以发送两个请求的方式编写我的代码:第二个请求取决于第一个请求的值。 有人可以指导我,如果这是可能的? 如果是的话那怎么样? 任何代码片段真的会有所帮助。 例如:以下是两个请求: mCompositeDisposable.add(fcService.getStationList() .subscribeOn(Schedulers.io()) // “work” on io thread .observeOn(AndroidSchedulers.mainThread()) // “listen” on UIThread .subscribe(this::handleResults, this::handleError) ); mCompositeDisposable.add(fcService.getStationSensor(“12345678”) .subscribeOn(Schedulers.io()) // “work” on io thread .observeOn(AndroidSchedulers.mainThread()) // “listen” on UIThread .subscribe(this::handleResults, this::handleError) ); 第二个请求可能来自第一个请求的响应值。 是否有可能合并这两个请求的方式,我只写一次代码的方式?

按下返回时,EditText不会触发更改

在使用购物车的应用程序中,我可以选择通过仅允许数字输入的EditText来更改项目的数量。 一切正常,除非用户改变字段,然后按后退键隐藏软键盘。 在这种情况下,该字段会显示已更改的值,但我不知道如何检测此更改并对其作出反应。 等待切换到另一个活动不是一个选项。 当用户用“完成”按钮确认时,我可以用“OnEditorActionListener”来处理。 但是后面的钥匙呢? 更新: 事实certificate,使用后退关闭软键盘时,onKeyDown / onBackPressed和编辑字段上的OnKeyListener都不会触发。

在Windows上Corda gradle安装失败:“无法解析net.i2p.crypto:eddsa:0.2.0”

在Windows上设置https://github.com/roger3cev/corda-training-template时 ,我得到以下堆栈跟踪。 这似乎是一个以.crypto结尾的文件名问题 What went wrong: Could not resolve all files for configuration ‘:java-source:compileClasspath’. Could not resolve net.i2p.crypto:eddsa:0.2.0. Required by: project :java-source > net.corda:corda-core:1.0.0 Could not resolve net.i2p.crypto:eddsa:0.2.0. Could not get resource ‘https://jcenter.bintray.com/net/i2p/crypto/eddsa/0.2.0/eddsa-0.2.0.pom’. Failed to move file ‘C:\Users\A57C\AppData\Local\Temp\gradle_download2832834655657514563bin’ into filestore at ‘C:\Users\A57C\.gradle\caches\modules-2\files-2.1\net.i2p.crypto\eddsa\0.2.0\d2905a940ee7c59e1636e1c3541069ccbbcdf227\eddsa-0.2.0.pom’ Failed to create parent directory ‘C:\Users\A57C\.gradle\caches\modules-2\files-2.1\net.i2p.crypto’ when creating directory ‘C:\Users\A57C\.gradle\caches\modules-2\files-2.1\net.i2p.crypto\eddsa\0.2.0\d2905a940ee7c59e1636e1c3541069ccbbcdf227’ Could not resolve […]

Java to Kotlin转换器和可空方法参数

我遇到了一个Java到Kotlin转换器不能将方法参数标记为可空的情况,使我失败的案例。 示例:使用registerActivityLifecycleCallbacks跟踪活动生命周期: registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} @Override public void onActivityStarted(Activity activity) {} @Override public void onActivityResumed(Activity activity) {} // … other overriden methods }); 将此代码粘贴到Kotlin结果中: registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle) {} override fun onActivityStarted(activity: Activity) {} override fun onActivityResumed(activity: Activity) {} override fun […]

Kotlin – exception后继续协程

我的问题 exception之后是否可以继续执行协程? 例 try { someMethod1() someMethod2() //Throws an exception! someMethod3() } catch(e: Exception) { //I do not want to call someMethod3 here! //I want the coroutine to resume after the exception inside of the original block. } finally { //I also do not want to call someMethod3 here! //I want the coroutine to resume […]

合并多个单打组成一个Observable

我正在编写一个Android应用程序,需要按以下顺序执行2个查询: 向一个返回Single<List> urls的库发出一个请求(让我们称之为RequestA)。 根据我从RequestA收到的内容,我必须使用每个这些URL向另一个库发出请求(RequestB)。 每个RequestB现在都返回一个Single。 现在我已经把所有的RequestB中的所有Single结合起来形成了一个observable。 就像Observable.mergedelayerror(List) 。 我不能这样做,因为mergedelayerror期望ObservableSource iterable 。 我知道我可以通过实现回调和使用一些丑陋的逻辑来实现这一目标但是我真的只需要使用由RX提供的运算符

运行在Kotlin中编写的Apache Tomcat servlet时出错

当我单击工具栏上的运行绿色箭头按钮,或者从IntelliJ IDEA Ultimate的运行菜单中选择运行Tomcat 8.0.36命令,以启动我在Kotlin中编写的HTTP Servlet应用程序时,似乎服务器启动但无法加载我的应用程序。 我说因为当我点击http://localhost:8080或者我的一个servlet在http://localhost:8080/login ,我只看到一个空白页。 这里是IntelliJ的输出窗口的输出的相关摘录,当我点击运行按钮。 10-Sep-2016 15:34:05.807 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 595 ms Connected to server [2016-09-10 03:34:06,384] Artifact Server:war exploded: Artifact is being deployed, please wait… 10-Sep-2016 15:34:09.256 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:153) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) […]