Tag: 匕首 2

改造+ GSON反序列化+领域关系

最佳实践:关系+ Realm保存的JSON反序列化。 我有以下JSON: { "organizations": [{ "id": 1, "name": "Orga 1" }], "states": [{ "id": 1, "organizationId": 1, "name": "Read" }] } 这里是相应的Kotlin对象: class Organization { @SerializedName("id") @Expose val id: Long? = null @SerializedName("name") @Expose val name: String? = null } class State { @SerializedName("id") @Expose val id: Long? = null @SerializedName("organizationId") @Expose val organizationId: […]

将限定符传递给提供者方法

我有一个自定义限定符,需要参数 – 枚举值。 枚举值包含特定于所需实例构造的信息。 如果我要添加新的枚举值,它会导致在模块中相同的样板代码,如下所示: 预选赛(JAVA): @Documented @Qualifier @Retention(RUNTIME) public @interface Format { Type value() default SYSTEM; enum Type { UI("dd-MM-yyyy HH:mm"), UI_DATE("EEEE,\u00A0dd MMMM yyyy"), . . . private String format; public String getFormat() { return format; } Type(String formatString) { format = formatString; } } } 模块(科特林): @Module class DateTimeModule { @Provides @Format(Format.Type.UI) fun […]

在混合Java / Kotlin项目中使用Dagger 2的Maven配置

什么是在混合Java / Kotlin项目中使用Dagger 2的建议Maven设置? 我找到了一个使用Gradle的示例项目: https : //github.com/damianpetla/kotlin-dagger-example与Maven类似的东西会非常有帮助。 更新:我试过了什么? 我使用了kotlinlang.org/docs/reference/using-maven.html中的Kotlin配置和google.github.io/dagger中的Dagger配置。 我还使用了build-helper-maven-plugin插件来将注释处理集成到IDEA中。 我的主要问题是我遇到了编译周期。 我的配置混合了Kotlin的编译和调用生成Dagger2类的注释处理器。 我无条件地尝试分离两个阶段,但缺乏更深入的Maven了解它的工作。

如何跳过基础包中的retrofit2使用的proguard模型?

我正在用Kotlin和Retrotif 2写一个应用程序。当我使用proguard时,我遵循这里的规则 https://github.com/krschultz/android-proguard-snippets/blob/master/libraries/proguard-square-retrofit2.pro 除此之外,我也需要推进我的模型,如https://stackoverflow.com/a/41136007/3286489 如果我在一个包中有我的模型,并且我有-keep class com.elyeproj.wikisearchcount.model.** { *; } -keep class com.elyeproj.wikisearchcount.model.** { *; } package com.elyeproj.wikisearchcount.model object Model { data class Result(val query: Query) data class Query(val searchinfo: SearchInfo) data class SearchInfo(val totalhits: Int) } 但是,如果我保留我的模型在基础包中的代码如下,但我不想保留整个包即-keep class com.elyeproj.wikisearchcount.** { *; } 因为这打败了proguard的目的 package com.elyeproj.wikisearchcount object Model { data class Result(val query: Query) data […]

未解决的参考DaggerApplicationComponent

我试图创建我的应用程序组件,但匕首不生成我的应用程序组件。 这里是MyApplication类 class MyApplication : Application() { companion object { @JvmStatic lateinit var graph: ApplicationComponent } @Inject lateinit var locationManager : LocationManager override fun onCreate() { super.onCreate() graph = DaggerApplicationComponent.builder().appModule(AppModule(this)).build() graph.inject(this) } } 这里是我的AppComponent类 @Singleton @Component(modules = arrayOf(AppModule::class)) interface ApplicationComponent { fun inject(application: MyApplication) } 这里是截图 这是我在github上的 项目 这里是错误日志 Error:(7, 48) Unresolved reference: DaggerApplicationComponent Error:(28, […]

如何在AndroidStudio中使用Dagger2和Kotlin在其他项目模块中实现接口库

我想在AndroidStudio中可以有2个不同的被动接口实现在其他工程模块中获取用户位置。 所以要具体它可以通过使用GMS,或只是本地Android的LocationManager。 这是我的存储库接口: interface RxLocationRepository { @SuppressLint("MissingPermission") fun onLocationUpdate(): Observable<Location> fun stopLocationUpdates() } 所以现在,我在这里实现这个接口,在AndroidStudio中的同一个项目模块中的类: class RxLocationRepositoryImpl(val reactiveLocationProvider: ReactiveLocationProvider, val reactiveLocationRequest: LocationRequest, val isUsingLocationNativeApi: Boolean, val locationManager: LocationManager, val geoEventsDistanceMeters: Int, val geoEventsIntervalSeconds: Int ) : RxLocationRepository { var locationToPopulate: Location = Location(LocationManager.GPS_PROVIDER) lateinit var mLocationCallbackNativeApi: LocationListener private val subject: BehaviorSubject<Location> = BehaviorSubject.createDefault(locationToPopulate) var locationEmitter: Observable<Location> […]

Dagger2不注入

我是Android的新手,并尝试使用Dagger2。 我花了整夜,仍然不知道为什么我的匕首不提供主持人。 这里是我的代码(我使用Kotlin) AppComponent @Singleton @Component(modules = arrayOf(PresenterModule::class)) interface AppComponent { fun inject(target: SplashActivity) } PresenterModule @Module class PresenterModule { @Provides @Singleton fun provideSplashPresenter(): SplashPresenter { return SplashPresenter() } } 应用 class App: Application() { companion object { lateinit var appComponent: AppComponent } override fun onCreate() { super.onCreate() appComponent = initDagger() } private fun initDagger(): […]

Android Studio无法重构“只读”kapt生成的代码

使用Kotlin和Dagger我发现,如果我尝试使用Android Studio的重构功能来更改,例如,kapt自动生成Dagger的代码中引用的类的名称(在$ buildDir / generated / source / kapt中),重构失败,因为自动生成的代码是“只读”的。 删除生成目录是一个笨手笨脚的解决方法。 有没有设置或什么东西可以防止这个问题?

Android Dagger:我无法提供没有@Inject构造函数的外部类

编辑 解决了这个问题。 看到我的帖子下面。 我正在使用Dagger和Kotlin编写一个Android应用程序。 我想将java.text.SimpleDateFormat类注入到我的类DateHelper @Singleton class DateHelper @Inject constructor(var dateFormat: SimpleDateFormat) { … } 我有一个模块,其中@Provides SimpleDateFormat 。 @Module class DateModule { @Singleton @Provides fun dateFormat(): SimpleDateFormat { return SimpleDateFormat("yyyy-MM-dd", Locale.US) } } 和一个Dagger组件: @Singleton @Component(modules = arrayOf(MyAppModule::class, DateModule::class)) interface MyAppComponent { … } 最后我的Application : open class MyApplication : Application() { private lateinit var […]

尝试使用Dagger2和Kotlin将ViewModelProvider注入到Activity时出错

在尝试将ViewModelProvider.Factory注入到Activity时收到以下错误: e: D:\AndroidStudioProjects\VolleyballStats\app\build\tmp\kapt3\stubs\debug\com\example\kamil\volleyballstats\di\AppComponent.java:6: error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method. e: e: public abstract interface AppComponent extends dagger.android.AndroidInjector<com.example.kamil.volleyballstats.VolleyballStatsApp> { e: ^ e: java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> is injected at e: dagger.android.DispatchingAndroidInjector.<init>(injectorFactories) e: dagger.android.DispatchingAndroidInjector<android.support.v4.app.Fragment> is injected at e: dagger.android.support.DaggerAppCompatActivity.supportFragmentInjector e: com.example.kamil.volleyballstats.views.main.MainActivity is injected at e: dagger.android.AndroidInjector.inject(arg0) 我创建了非常标准的Dagger2实现,如下所示: @Singleton […]