Tag: 匕首 2

匕首2在Kotlin未解决的参考DaggerXXXSub

我试图在我的Android项目中使用Dagger 2,我在Kotlin编码。 我在我的项目中使用了Dagger 2,就像Dagger 2 Android中的例子。 应用程序/的build.gradle apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { applicationId "com.wj.kotlintest" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: […]

Retrofit2 + Kotlin中的SimpleXML:MethodException:注释必须标记一个set或get方法

我想从API中获取XML数据,并使用Kotlin中的Retrofit2 + SimpleXML将其映射到Kotlin模型对象。 但是,我从SimpleXML得到如下错误信息。 org.simpleframework.xml.core.MethodException:Annotation @ org.simpleframework.xml.Element(data = false,name =,required = true,type = void)必须标记一个set或get方法 这是提取的XML数据 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <response> <result code="0">Success</result> <token>XXXXXXXXXXXXXXXXXXXX</token> <uid>4294967295</uid> </response> 下面是Kotlin模型对象 @Root(name = "response") public class User() { @Element public var result: String? = null @Element public var token: String? = null @Element public var uid: String? = null } […]

Retrofit 2.0如何获得反序列化的错误response.body

我正在使用Retrofit 2.0.0-beta1 。 在测试中,我有一个替代方案,并期望HTTP 400错误 我想有retrofit.Response<MyError> response但response.body() == null MyError没有反序列化 – 我只能在这里看到它 response.errorBody().string() 但它不会给我MyError作为对象

kotlin限定符注释被忽略

下面的代码编译第一​​次,但在第二次构建给出: 错误:SomeObject绑定多次: @Provides @NotNull SomeObject SomeModule.provideSomeObject() @Provides @NotNull SomeObject SomeModule.provideSomeScopedObject() 看起来,编译器忽略了连续构建中的Qualifier注释。 当组件和模块在java中被编写时没有帮助,因为在Main类中注释被忽略。 @dagger.Component(modules = arrayOf(SomeModule::class)) interface Component { fun inject(main: Main) } class Main { @field:[javax.inject.Inject SomeScope] lateinit var obj: SomeObject } @dagger.Module class SomeModule { @dagger.Provides fun provideSomeObject(): SomeObject { return SomeObject("noScope") } @SomeScope @dagger.Provides fun provideSomeScopedObject(): SomeObject { return SomeObject("someScope") } } data […]

匕首2错误:依赖“不能提供没有@Inject构造函数”

我试图在我的Android项目中使用Dagger 2。 对于初学者,我想利用两个组件分别负责注入应用程序范围和活动范围的依赖关系。 作为一个基本的参考,我使用了这个答案 。 所以有两种不同的方式来设置组件之间的关系:使用@Subcomponent注解和dependencies参数。 如果我去第一个,我的AppContextComponent工作正常。 但只要我尝试从ActivityContextComponent注入依赖项,我得到这个生成时间错误: 错误:com.example.ui.activity.MainActivity不能提供@Inject构造函数或@提供 – 或@ Produces注释的方法。 第二种方法,我得到这个错误的所有依赖。 知道我有提供方法,这个错误信息是坦率地没有用。 这里有一些其他可能的来源,我已经设法谷歌这个错误,但他们似乎并非如此: 范围问题 。 由于来自不同提供方法的返回类型相同而引起歧义 (即使删除提供Context 方法 ,问题仍然存在)。 下面的代码是在Kotlin中,但我认为它应该是非常简单的。 应用程序组件 object AppContext { // a singleton used in place of a Java static field @JvmStatic lateinit var graph: AppContextComponent } @ApplicationScope @Component(modules = arrayOf(AppContextModule::class)) interface AppContextComponent { fun inject(fragment: BaseFragment) fun newActivityContextComponent(module: […]

在RxAndroid用例的演示者中测试什么以及如何测试

我的项目使用干净的架构 。 我用: 表示层的MVP 使用使用RxAndroid并获得DisposableObservers的案例 DI的匕首2 来自演示者(Kotlin)的示例代码: fun doSomething() { getInterestingDataUseCase.execute(object : DisposableObserver<List<InterestingDataItem>>() { override fun onStart() { view.showLoadingIndicator() } override fun onNext(dataList: List<InterestingDataItem>) { view.showDataItems(dataList) } override fun onError(e: Throwable) { view.showErrorDialog() } override fun onComplete() { view.hideLoadingIndicator() } }) } 我想为这个主持人编写单元测试。 我的问题是:在DisposableObserver不同的方法调用值得测试(onStart,onNext …)? 如果是这样的话,看起来好像我需要将DisposableObserver注入主持人(这样我就可以嘲笑它)。 有更清洁的方法吗?

使用@ Component.Builder和构造函数参数

我试图学习匕首,kotlin和mvvm,所以如果这个问题很奇怪,请原谅我。 如果我有一个NetworkModule,基本上提供了翻新的应用程序,我认为这是一个好主意,传入基础的网址,我们要建立翻新。 我可以通过传入应用程序的组件构建函数来以旧的方式来做到这一点,但不能通过@ Component.Builder方法来解决这个问题。 尝试: App.kt DaggerAppComponent.builder() .application(this) .networkModule(BuildConfig.BASE_URL) .build() .inject(this) AppComponent.kt @Singleton @Component(modules = arrayOf( AppModule::class, NetworkModule::class, AndroidInjectionModule::class, ActivityBuilder::class)) interface AppComponent { @Component.Builder interface Builder { @BindsInstance fun application(application: Application): Builder @BindsInstance fun networkModule(baseUrl: String): Builder fun build(): AppComponent } fun inject(app: App) } NetworkModule.kt @Module class NetworkModule(baseUrl: String) { //Attempt to force a […]

匕首和登录凭证

我正在寻找一种方式来创建一个Dagger2组件来密码验证后存储UserCredentials 我有3个活动 – >登录,首页,关于 我想在登录密码验证后创建一个LoggedUser组件,而不是@Inject这个UserLogged在家里和关于,即时尝试避免多个数据库访问(我的情况要求),比当用户单击关闭主页或关于活动时,它返回登录和销毁用户登录,并重新启动进程,但即时通讯有点失去了如何创建一个自定义组件的@ActivityScope在登录创建,但在登录销毁 Curreclty im使用Kotlin + MVP和Injecting Field在演示者中以这种方式: init { println("Presenter Init: " + javaClass.simpleName) MyApplicationCloudant.getAppComponent().inject(this) } 该组件是以这种方式构建的: component = DaggerAndroidComponent.builder() .androidModule(AndroidModule(this)) .build() 我的AndroidModule: @Module class AndroidModule(private val application: PontotelApplicationCloudant) { /** * Allow the application context to be injected but require that it be annotated with * [@Annotation][ForApplication] to explicitly differentiate it […]

如何在Kotlin中使用Dagger的2 @Named限定符

最近我遇到了Kotlin的@Named限定符问题。 我认为从这个转变为: var boldTypeface: Typeface? = null [Inject] set 进入这个 var boldTypeface: Typeface? = null [Inject Named("bold")] set 要么 var boldTypeface: Typeface? = null [Inject] [Named("bold")] set 会解决我的问题。 但它没有,甚至没有编译。

模块必须设置

我尝试使用到目前为止工作的新的Dagger Android注入的东西 。 现在我想扩展到我的需求。 在我的MainActivityModule我添加了一个TestModule : @Module abstract class MainActivityModule { @ActivityScope @ContributesAndroidInjector(modules = arrayOf(TestModule::class)) internal abstract fun contributeMainActivityInjector(): MainActivity } TestModule非常简单: @Module internal abstract class TestModule { @Provides internal fun provideTest(): String { return "foo bar" } } 但是我得到这个错误: TestModule must be set 我看着生成的源代码,但无法找到我必须做的提示。 我也在Google搜索了这个,但是只找到了简单的例子:-( 我忘了什么 你可以在GitHub找到完整的应用程序。 编辑 正如Jeff Bowman provideTest()需要是静态的。 当我创建一个这样的Java类: @Module public […]