Как ввести сетевой модуль, как это? - PullRequest
2 голосов
/ 01 июля 2019

Я не могу придумать, как ввести сетевой модуль. Я пытаюсь найти много способов ввести сетевой модуль в кинжал 2. Но я не могу решить эту проблему. Пожалуйста, помогите мне.

abstract class BaseRepository protected constructor() {
    init {
        val logger = HttpLoggingInterceptor()
        logger.level = HttpLoggingInterceptor.Level.BODY
        val client = OkHttpClient.Builder()
            .connectTimeout(1, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(15, TimeUnit.SECONDS)
            .addInterceptor(logger)
            .build()

        val retrofit = Retrofit.Builder()
            .baseUrl(BuildConfig.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(Gson()))
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .client(client)
            .build()

        mTheApi = retrofit.create<AttendanceApi>(AttendanceApi::class.java)
    }
}

Я пробую этот модуль, но он не работает.

class NetworkModule {
    companion object {
        private const val NAME_BASE_URL = "NAME_BASE_URL"
    }

    @Provides
    @Named(NAME_BASE_URL)
    fun provideBaseUrlString()=
        "http://attendance.saltcloudserver.com/api/"

    @Provides
    @Singleton
    fun provideHttpClient()=OkHttpClient()

    @Provides
    @Singleton
    fun provideRetrofit(interceptor: HttpLoggingInterceptor): OkHttpClient {
        return OkHttpClient.Builder()
            .connectTimeout(1, TimeUnit.SECONDS)
            .readTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(15, TimeUnit.SECONDS)
            .addInterceptor(interceptor)
            .build()
    }
}

Я ожидаю вывод, но не могу ввести это.

1 Ответ

0 голосов
/ 01 июля 2019

Чтобы идентифицировать кинжал, вам нужно указать, что это Module. Для этого вам нужно добавить @Module аннотацию к классу, который, как я вижу, отсутствует в вашей текущей реализации.

@Module
class NetworkModule {
        companion object {
            private const val NAME_BASE_URL = "NAME_BASE_URL"
        }

        @Provides
        @Named(NAME_BASE_URL)
        fun provideBaseUrlString()=
            "http://attendance.saltcloudserver.com/api/"

        @Provides
        @Singleton
        fun provideHttpClient()=OkHttpClient()

        @Provides
        @Singleton
        fun provideRetrofit(interceptor: HttpLoggingInterceptor): OkHttpClient {
            return OkHttpClient.Builder()
                .connectTimeout(1, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(15, TimeUnit.SECONDS)
                .addInterceptor(interceptor)
                .build()
        }
    }
...