Tag: 匕首 2

Android Kotlin Gson缓慢的Json反序列化

我有一个大的JSON,我不得不反序列化,我只对if的某些部分感兴趣。 我正在使用的Pojos是这样的: data class Response<T>( val header: JHeader, val result: T ) data class JHeader( val success: Int, val error: List<String> ) class Character{ @SerializedName("id_") val id: Int @SerializedName("levelA") val level: String @SerializedName("a3") val unit: String = "" constructor(id: Int, level: String) { this.id = id this.level= level } } 改造适配器的相关部分: val retrofit = Retrofit.Builder() […]

Dagger2将演示者注入到Kotlin Activity错误中

我使用dragger2将演示者注入到Kotlin Activity中,演示者为null,这是我的代码: class CategoryDetailActivity : MvpActivity<ProductFilterView,ProductFilterPresenter>(), ProductFilterView { private lateinit var presenter: ProductFilterPresenter @Inject set override fun onCreate(savedInstanceState: Bundle?) { initialInjector() super.onCreate(savedInstanceState) setContentView(R.layout.activity_category_detail) initData() initEvent() } private fun initialInjector() { DaggerProductFilterComponent.builder() .applicationComponent(applicationComponent) .productFilterModule(ProductFilterModule()) .build() .inject(this) } override fun getPresenter(): ProductFilterPresenter { return presenter!! } } 在MvpActivity的onCreate()中调用getPresenter()方法,而MvpActivity是一个java类。 初始的演示者需要一些由ProductFilterModule提供的实例,也许演示者应该是初始化后的组件注入,我猜。 当我运行时,抛出KotlinNullPointerException,主持人为空。 time: FATAL EXCEPTION: main Process: com.chiquedoll.chiquedoll, PID: […]

用匕首使用Kotlin

使用Dagger向类中注入依赖关系的最好方法是什么,特别是像Dagger这样的零参数构造函数类,比如Activities? 匕首2可能会改善情况吗? 提前致谢。

新的建筑与匕首和Kotlin

我在Kotlin的New Architecture组件中遇到了一个问题,那就是当我用建议的方式(在onCreate()方法)中创建ViewModel组件时,结果如下所示: 在活动方向改变之后,我得到和以前一样的ViewModel实例 这是我创造这个的方式 override fun onCreate(savedInstanceState: Bundle?) { AndroidInjection.inject(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_list) val arrayMap = ArrayMap<Class<out ViewModel>, ViewModel>() arrayMap.put(ListViewModel::class.java, ListViewModel(webApi, repoDao)) val factory = ViewModelFactory(arrayMap) listViewModel = ViewModelProviders.of(this, factory).get(ListViewModel::class.java) listViewModel.items.observe({ this.lifecycle }) { Toast.makeText(this, it?.joinToString { it + " " } ?: "null", Toast.LENGTH_SHORT).show() } 但是当我使用Dagger注入ListViewModel时,每次重新创建Activity时都会得到ListViewModel的新实例。 这是一个Dagger ListActivityModel的代码。 @Module @ListActivityScopeclass ListActivityModule { @Provides @ListActivityScope fun […]

如果没有kotlin中的@ Provide-或@ Produces注解方法,则不能提供上下文

我在Kotlin使用Dagger进行依赖注入。 现在这里是必要的类 ActivityModule @Module class ActivityModule (val activity : Activity){ @Provides @ActivityContext fun provideContext() : Context{ return activity } } ActivityComponent @PerActivity @Component(dependencies = arrayOf(ApplicationComponent::class), modules = arrayOf(ActivityModule::class)) interface ActivityComponent { fun inject(activity: MainActivity) } 主要活动 @Inject @ActivityContext lateinit var context:Context override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) DaggerActivityComponent.builder() .applicationComponent(MainApplication.getInstance().getApplicationComponent()).activityModule(ActivityModule(this)).build() .inject(this); 现在我收到以下错误 error: android.content.Context cannot be […]

正确的方法来注入匕首2 + Kotlin + ViewModel

class SlideshowViewModel : ViewModel(){ @Inject lateinit var mediaItemRepository : MediaItemRepository fun init() { What goes here? } 所以我想学习Dagger2,这样我可以让我的应用程序更易于测试。 问题是,我已经集成了Kotlin,并且正在开发Android架构组件。 我明白,构造函数注入是可取的,但这是ViewModel不可能的。 相反,我可以使用lateinit为了注入,但我不知道如何注入。 我是否需要为SlideshowViewModel创建一个组件,然后注入它? 还是我使用应用程序组件? gradle这个: apply plugin: 'com.android.application' apply plugin: 'kotlin-android' kapt { generateStubs = true } dependencies { compile "com.google.dagger:dagger:2.8" annotationProcessor "com.google.dagger:dagger-compiler:2.8" provided 'javax.annotation:jsr250-api:1.0' compile 'javax.inject:javax.inject:1' 应用组件 @ApplicationScope @Component (modules = PersistenceModule.class) public interface ApplicationComponent […]

Android – Kotlin – 匕首 – 没有这样的方法例外

今天,我在新的Android Studio Canary(测试版)中创建了项目。 我试图添加匕首2框架,但我有一些麻烦这样做。 首先我添加一些依赖项: compile 'com.google.dagger:dagger:2.11' kapt 'com.google.dagger:dagger-compiler:2.11' provided 'org.glassfish:javax.annotation:10.0-b28' apply plugin: 'kotlin-kapt' (top of file) 而只是为了我的测试需要等我创建了类: class TempClass {} 接下来我做了一些示例模块 @Module class TempClassModule { @Singleton @Provides fun provideTempClass() : TempClass = TempClass() } 和组件: @Component (modules = arrayOf(TempClassModule::class)) interface TempClassComponent { fun inject(mainActivity: MainActivity) } 我的应用程序类: class MyApp : Application() { companion object […]

Dagger2 + MVP上Kotlin

我正在学习Dagger2 + MVP并在Kotlin上做。 而且我在理解Dagger2或者MVP或者那里有一个问题。 构建一个应用程序和想法应该如何工作是非常简单的。 该应用程序由左侧导航MenuActivity和几个Fragments (比方说3),应该在activity_menu.xml的FrameLayout中进行更改。 我已经读了几篇文章,花了几天时间学习Dagger2。 本文我作为教程来构建我的示例: https : //proandroiddev.com/dagger-2-part-ii-custom-scopes-component-dependencies-subcomponents-697c1fa1cfc 在我的想法中,Dagger架构应该由三个@Component组成:(1)AppComponent,(2)MenuActivityComponent和(3)AccountFragmentComponent。 从我的理解和文章中的建筑图片我的架构可以是这样的:(3)取决于 – >(2)取决于 – >(1) 每个@Component具有@Module :(1)AppModule,(2)MenuActivityModule和(3)AccountFragmentModule。 (2)MenuActivityModule和(3)AccountFragmentModule应该@Provide Presenter从MVP意识形态的Presenter是@Inject在MenuActivity和其他Fragment ,如AccountFragment 。 的AppModule @Module class AppModule(val app : App){ @Provides @Singleton fun provideApp() = app } AppComponent @Singleton @Component(modules = arrayOf(AppModule::class)) interface AppComponent{ fun inject(app : App) fun plus(menuActivityModule: MenuActivityModule): MenuActivityComponent } MenuActivityModule […]

匕首不能提供注射Kotlin

当我尝试使用Kotlin和Dagger 2时,我有这个问题。 “接口不能提供@提供或@产生注释的方法”。 这是我的Module类: @Module class MenuActivityModule(@NonNull private val menuActivity: MenuActivity) { @Provides @MenuActivityScope fun provideGameScreenDimensions(application: Application) = GameScreenDimension(application.resources) @Provides @MenuActivityScope fun provideAudio() = AndroidAudio(menuActivity) @Provides @MenuActivityScope fun providePowerManager() = menuActivity.getSystemService(Context.POWER_SERVICE) as PowerManager @Provides @MenuActivityScope fun provideWakeLock(@NonNull powerManager: PowerManager) = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, Preferences.APPLICATION_TAG) } This is a part of my Activity class, where I inject some […]

如何在Kotlin中注入原始变量?

我在我的Android应用程序中使用Dagger2作为DI,并使用此代码注入类到我的活动罚款: @field:[Inject ApplicationContext] lateinit var context: Context 但是,在Kotlin的基本类型属性(例如Boolean )中不允许使用lateinit修饰符,我该如何做这样的事情? @field:[Inject Named("isDemo")] lateinit var isDemo: Boolean 当我从这个代码删除lateinit我得到这个错误Dagger does not support injection into private fields