Tag: 匕首 2

HttpLoggingInterceptor不与日志记录2

我试图记录所有的请求(与网络拦截器)使用refrofit2,kotlin和日志拦截器: 翻新:“2.0.2” okhttp3:“3.2.0” com.squareup.okhttp3:logging-interceptor 3.2.0 喜欢: val interceptor = HttpLoggingInterceptor() interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); val okHttpClient = OkHttpClient.Builder() .addNetworkInterceptor(interceptor) // same for .addInterceptor(…) .connectTimeout(30, TimeUnit.SECONDS) //Backend is really slow .writeTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .build() sRestAdapter = Retrofit.Builder() .client(okHttpClient) .baseUrl(if (host.endsWith("/")) host else "$host/") .addConverterFactory(GsonConverterFactory.create(gson())) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build() 它只是打印: D/OkHttp: –> GET url… D/OkHttp: –> END GET 发生什么事? —————编辑——– 在主线程上做请求的错误不会被记录器显示出来,所以要小心。

为什么在编译时使用kotlin在Dagger2中使用Scopes和Singleton注释会导致错误?

该应用程序工作正常,除非我在一些“提供”方法之前添加@MainScope或@Singleton注释,然后我得到gradle生成错误 错误:执行任务':app:kaptDebugKotlin'失败。 内部编译器错误。 查看日志了解更多详情 日志包含这个: 生成时间戳:本地:1508577084874,设备:1508577084874 2017-10-21 11:18:34,358 [216576]信息 – ools.idea.fd.InstantRunBuilder – BuildCause:FIRST_INSTALLATION_TO_DEVICE,BuildMode:FULL 2017-10-21 11:18:34,359 [216577]信息 – ild.invoker.GradleBuildInvoker – 将执行Gradle任务:[:app:assembleDebug] 2017-10-21 11:18:34,377 [216595]信息 – s.plugins.gradle.GradleManager – 指示gradle使用java从C:/ Program Files / Java / jdk1.8.0_144 2017-10-21 11:18:34,408 [216626] INFO – util.EmbeddedDistributionPaths – 在'C:\ Program Files \ prebuilts \ tools \ common \ offline-m2'2017-10-21 11:18:34,408 [216626] INFO – […]

使用Retrofit 2和Kotlin获取错误的原始HTML / JSON响应

我有这个小扩展函数来简化以同步方式从Call对象获取正文: private fun <T> Call<T>.bodyOrError(): T? { val resp = this.execute() if (resp.isSuccessful) { return resp.body() } val errorBody = resp.errorBody()?.string() throw RuntimeException("Failed to parse the HTTP response: $errorBody") } 问题是这行引发“com.fasterxml.jackson.databind.JsonMappingException:不能反序列化的实例java.lang.String超出START_OBJECT标记”: val resp = this.execute() 如果我决定捕捉这个异常,我怎么得到它试图解析的原始JSON / HTML响应,所以我可以把它包含在异常堆栈跟踪中? 想象一下,这是发生在生产(这就是为什么我不想使用任何HttpLoggingInterceptor等),我会相当注定,因为我不知道在解析过程中究竟出了什么问题。 (我正在使用杰克逊解析器) 提前致谢!

在Moshi 1.5中使用Kotlin使用KotlinJsonAdapterFactory()时,无法找到类

我面对的问题有点奇怪,因为当我有一个正常的模型类,我用作为改造2的响应模型,我得到一些意想不到的错误,假设 open class Example : RealmObject(){ @Json(name = "token") var token: String? = null @Json(name = "data") var data: RealmList<Data>? = null } 和Data类是 open class Data : RealmObject(){ @Json(name = "info") var info: String? = null } 我的代码崩溃,显示一个ClassNotFoundException(我在调试模式下运行),如果删除KotlinJsonAdapterFactory()崩溃不会发生,但数据值变得不存在,即在调试模式下,它出现,就好像它不存在,即Example的一个对象将只显示标记值,数据不存在,甚至不存在,但我需要KotlinJsonAdapterFactory(),因为我使用annonations,所以上面只是一个实验。 我发现的唯一的解决方案是将两个类都转换为数据类,它完美地工作(当然,我要去除RealmObject扩展,使RealmList一个正常的列表),但我需要扩展RealmObject()类和数据类不能打开Realm db是模型所需要的。 所以我回到1.4删除了KotlinJsonAdapterFactory(),并且一切正常,甚至在似乎是proguard后,所以我应该怎么做才能升级到Moshi 1.5。 此外,我已经更新了我的示例代码中的数据对象是一个RealmList,可能是为什么它被忽略/不存在,当响应来了可能是因为我的RealMe虚拟适配器Moshi被忽略? 我将附上我的moshi片段和改造实例 Moshi`instance Moshi.Builder() .add(KotlinJsonAdapterFactory()) .add(RealmListAdapter.FACTORY) .build() 改造实例 Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(MoshiConverterFactory.create(moshi)) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) […]

使用kapt时,Dagger跳过Google服务模块的工厂代码

我有一个Android应用程序,我已经转换到Kotlin,当涉及到一个特定的模块时,我遇到了Dagger的障碍。 在我的项目build.gradle ,我有: buildscript { ext.kotlin_version = "1.0.1-2" repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.0-alpha5' classpath 'com.google.gms:google-services:2.0.0-rc3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 而在app/build.gradle ,我有以下相关的设置: apply plugin: "nebula.dependency-lock" apply plugin: "com.android.application" apply plugin: 'kotlin-android' apply plugin: "kotlin-android-extensions" apply plugin: "com.getkeepsafe.dexcount" // … […]

Kotlin和Dagger:我可以使用@Inject的对象仍然可以为空/可选?

我需要一些可以使我的类可以为空/可选的,因为在某些设备上发生运行时错误。 这可能吗? class MyFragment extends Fragment { @Inject var presenter: MyPresenter? = null // Other codes here… } 我想用presenter作为一个选项,因为一些旧的Android设备特别是抛出这个错误(这是在我删除lazyinit之前)。 码: class MyFragment extends Fragment { @Inject lazyinit var presenter: MyPresenter? = null // Other codes here… override fun onDestroy() { super.onDestroy() presenter.somecode() } } 错误: Fatal Exception: java.lang.RuntimeException: Unable to destroy activity {com.sample.MyActivity}: cr: lateinit […]

MVP演示者没有正确注入

我正在学习Kotlin和Dagger 2,试图将一些Mindorks高级MVP样本转换成Kotlin,但是我有Dagger2编译问题。 我在这里上课,但是非常接近! 不要介意这个不整洁的东西,我打算在编译完成之后再梳理每个类。 如果有什么遗漏,请让我知道。 错误归结为我的演示者类未正确注入到活动中。 错误如下所示: e: D:\_Dev\repo\app\build\tmp\kapt3\stubs\debug\com\xxx\di\component\ActivityComponent.java:8: error: com.xxx.login.LoginMVP.Presenter<com.xxx.login.LoginMVP.View,? extends com.xxx.login.LoginMVP.Interactor> cannot be provided without an @Provides- or @Produces-annotated method. e: e: public abstract void inject(@org.jetbrains.annotations.NotNull() e: ^ e: com.xxx.login.LoginMVP.Presenter<com.xxx.login.LoginMVP.View,? extends com.xxx.login.LoginMVP.Interactor> is injected at e: com.xxx.login.LoginActivity.presenter e: com.xxx.login.LoginActivity is injected at e: com.xxx.di.component.ActivityComponent.inject(activity) e: java.lang.IllegalStateException: failed to analyze: org.jetbrains.kotlin.kapt3.diagnostic.KaptError: Error while annotation […]

未解决的参考:回调

我试图将我的Android项目移植到Kotlin,但遇到retrofit2.Callback问题。 即使我导入这个接口,我仍然收到Unresolved reference: Callback错误。 为什么会发生这种情况,我该如何解决?

错误:无法访问NotNull

我在编译时遇到上面的错误,而且没有去任何源文件。 在慢慢识别出导致问题的变化后,发现这显然是匕首2注入造成的问题。 @FragmentScope @Subcomponent public interface MyComponent { void inject(MyJavaFragment myJavaFragment); void inject(MyJavaClass myJavaClass); void inject(MyKotlinClass myKotlinClass); // <- if change to Java, all works } 我从Java代码转换MyKotlinClass到Kotlin,并且发生错误。 这是在一个库中,我已经在build.gradle中使用它 kapt "com.google.dagger:dagger-compiler:$daggerVersion" 为什么? (注意:应用程序代码最初是Java,所以除非需要,所以我没有全部改为Kotlin)。

Kapt generatestubs – 不能用单元测试的内部构造函数初始化对象

假设我们有一个kotlin类定义为: package foo class Bar internal constructor() { //… } 当我尝试从一个测试方法,如: package foo class TestBar { @Test fun testingBar() { Bar() //<—– error } } 我收到以下错误: Cannot access '<init>': it is internal in 'Bar' Bar和TestBar都在同一个AndroidStudio模块中(android库)源代码的两个路径都是在gradle中定义的: … sourceSets { main.java.srcDirs += 'src/main/kotlin' test.java.srcDirs += 'src/test/kotlin' } … 测试似乎一般工作正常,但我无法创建任何与内部构造函数的对象。 我在用着: ext.kotlin_version = '1.1.3-2' 编辑 感谢您的反馈。 我决定从头开始制作简单的android多模块应用程序,它工作得很好。 然后,我试图摆脱我的模块依赖关系一个接一个,事实证明,问题是由dagger2 […]