我面临的问题是Matchers.anyObject()回报null.当用于仅接受非可空类型的mock方法时,它会导致抛出"不应为null"异常.
`when`(mockedBackend.login(anyObject())).thenAnswer { invocationOnMock -> someResponse }
Run Code Online (Sandbox Code Playgroud)
模拟方法:
public open fun login(userCredentials: UserCredentials): Response
Run Code Online (Sandbox Code Playgroud) 可以运行gradlew dependencies以了解模块任务的依赖关系.有没有办法找到buildscript依赖的传递依赖?
示例:
classpath 'com.android.tools.build:gradle:1.0.0'直接取决于:
com.android.tools.build builder
com.android.tools.lint lint
net.sf.proguard proguard-gradle
tools.base project-test-lib
Run Code Online (Sandbox Code Playgroud)
可以在MVNRepository上看到.但是这些工件有自己的依赖关系.有没有办法找到那些没有手动遍历整个依赖树?
作为澄清,我所说的类路径定义如下:
buildscript {
repositories {}
dependencies { .... }
}
Run Code Online (Sandbox Code Playgroud) RxJava v1.0.13引入了一种新的Observable:rx.Single.它非常适合请求 - 响应模型,但缺少引入doOnNext()等运算符的标准副作用.因此,结果会发生很多事情要困难得多.
我的想法是用同一个Single实例的多个订阅替换doOnNext().但这可能导致底层工作多次完成:每次订阅一次.
示例rx.Single实现:
private class WorkerSubscribe<SomeData>() : Single.OnSubscribe<SomeData> {
override fun call(sub: SingleSubscriber<in SomeData>) {
try {
val result = fetchSomeData()
sub.onSuccess(result)
} catch(t: Throwable) {
sub.onError(t)
}
}
}
val single = Single.create<SomeData>(WorkerSubscribe())
Run Code Online (Sandbox Code Playgroud)
用法:
single.subscribe({}, {})
single.subscribe({}, {}) // Data is fetched for the second time
Run Code Online (Sandbox Code Playgroud)
是否有可能创建一个单独的实例,即使多次调用single.subscribe(),也不会多次fetchSomeData(),但缓存并返回相同的结果?
Java 8 Streams非常强大,但是当不需要并行性时,Kotlin Sequence似乎更易于使用.
有没有办法将a stream.sequencial()转换为序列?
甚至可以使用Kotlin编写一个库吗?
我看到的问题是,这将取决于specyfic版本kotlin-stdlib和kotlin-runtime并迫使图书馆的用户使用相同的版本.
我正在考虑使用jarjar重新包装那些但是那么,如何将它们包括在胖子型分发中?在解压缩的内部我看到/libs目录 - 有没有办法使用它?
我正在尝试在Java应用程序中实现基于Yubikey NEO OpenPGP智能卡小程序的PGP加密.这似乎是一个黑暗的艺术,并不容易谷歌这个东西,但这里是我到目前为止的地方:
卡被初始化,密钥使用gpg工具生成.它通常有效.我有.asc格式的公钥,并设法加载它org.bouncycastle.openpgp
使用javax.smartcardioAPI 连接USB加密狗中的智能卡.
选择OpenPGP小程序
val pgpAID = bytes(0xD2, 0x76, 0x00, 0x01, 0x24, 0x01)
val answer = cardChannel.transmit(CommandAPDU(0x00, 0xA4, 0x04, 0x00, pgpAID))
Run Code Online (Sandbox Code Playgroud)成功向卡片出示正确的PIN码
val pin = "123456"
return bytes(0x00, 0x20, 0x00, 0x82, pin.length) + pin.toByteArray(Charsets.UTF_8)
Run Code Online (Sandbox Code Playgroud)发送准成功(见下文)decipher命令
bytes(0x00, 0x2a, 0x80, 0x86, data.size) + data + bytes(0x00)
Run Code Online (Sandbox Code Playgroud)
何时data = "xxxx".toByteArray(),结果是SW=9000(=成功)但没有返回数据.这是一个天真的测试,因为第52页的OpenPGP applet文档提到了这一点
在加密之前,命令输入(填充指示符字节除外)应根据PKCS#1格式化.
我不知道如何加密数据并将其转换为PKCS#1格式.
我也试过阅读Yubico OpenPGP卡实现测试,但它只提供了另一个"失败"的例子(第196行).我尝试运行它,但结果是不同的:测试期望SW=0050(表示异常?)和我得到的是SW=6f00(没有精确的诊断,根据这个文件).
我用完整的代码创建了一个GitHub存储库.它是用Kotlin编写的,但应该很容易阅读.
我现在使用的代码:
Pooled<ByteBuffer> pooledByteBuffer = exchange.getConnection().getBufferPool().allocate();
ByteBuffer byteBuffer = pooledByteBuffer.getResource();
int limit = byteBuffer.limit();
byteBuffer.clear();
exchange.getRequestChannel().read(byteBuffer);
int pos = byteBuffer.position();
byteBuffer.rewind();
byte[] bytes = new byte[pos];
byteBuffer.get(bytes);
String requestBody = new String(bytes, Charset.forName("UTF-8") );
byteBuffer.clear();
pooledByteBuffer.free();
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常但我不确定是否需要clear()ByteBuffer才能将其返回池中.我甚至不确定使用exchange.getConnection().getBufferPool().allocate();.文档中没有太多关于它的内容.
Akka演员和Jade特工的概念有什么实质性的区别吗?
据我所知,通过创建独立实体(具有系统逻辑块)可以通过在它们之间发送消息进行通信来实现系统分发.
还有其他因素使它们不同(如表现或预期目的)?
我正在使用Android Studio使用Gradle构建一个Android库项目.它有一些本地依赖:
compile project(':androidlibrary')
嵌套的附加外部依赖项:
compile group: 'com.google.guava', name: 'guava', version: '14.0.1'
我设法构建aar文件,但不包括外部或本地依赖项.我希望在发布到maven时POM文件中会提到外部依赖项,但本地的依赖项呢?
建立这样的项目的正确方法是什么?
Dagger被宣传为"Android和Java的快速依赖注入器".但是我不能让它在没有Gradle'android'插件的情况下运行.
compile 'com.squareup.dagger:dagger:1.2.1'
provided 'com.squareup.dagger:dagger-compiler:1.2.1'
Run Code Online (Sandbox Code Playgroud)
有没有provided在的Java"或"应用" gradle这个插件,我使用.在这个错误报告中甚至提到了它.
让它''编译'yelds没有结果.java.lang.IllegalStateException: Module adapter for class ... could not be loaded.抛出同样的东西.
如何使用'java'和'application'来配置使用dagger注释处理器?