IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Koin简单使用 -> 正文阅读

[移动开发]Koin简单使用

Koin是什么?为什么要用Koin?

Koin 是一个注入框架无需反射/代理 即可方便使用对象去调用某个类对象从而使用类对象里边的方法。

我也不懂,这里只是教大家怎么是实践使用Koin,只因项目上使用到了不得已而为之

Koin 来源于一位开源作者

Inside Koin 3.2 - Optimizing your Modules with Includes

其木的是为了在Kotlin中方便快捷进行注入,在这之前有另一个开源注解Degger2这里就不做描述了,有需要的自行百度

使用方法分几步:

首先1.你要注入的对象是什么,也就是你将要使用的类

这里以?

LoginPresenter 为例

?

class LoginPresenter(val login: LoginModel) {

    fun login():Boolen{
        return login.do()
    }

}
2.LoginPresenter 所需要的参数类 LoginModel

??

interface LoginModel{
    fun do(): Boolean
}

class LoginModelImpl : LoginModel{

    override fun do(): Boolean {
        // to do login ... 这里省略了一些去登陆的逻辑
        return true
    }
}

3.新建一个类 AppMoudle? 将需要注入的类 使用Koin的model进行注册

package com.nova.di

import com.nova.koin.HelloRepository
import com.nova.koin.HelloRepositoryImpl
import com.nova.koin.MySimplePresenter
import org.koin.dsl.module

/**
 * @author Created by Li
 * 2022/7/14
 */

val appModule = module {
    // single 表示单例
    single<LoginModel> { LoginModelImpl() }
   // factory 表示工厂  get()  表示自动带入上边注册的参数
    factory { LoginPresenter(get()) }
}

4.在Application处开始注入对象

class MyApplication : Application() {
   
    override fun onCreate() {
        super.onCreate()

        startKoin {
            // Level.NONE
            androidLogger()
            androidContext(this@MyApplication)
            modules(appModule)
        }

    }
}

5.在调用的页面获取注入的对象LoginPresenter

class KoinActivity : AppCompatActivity() {
    private val TAG = "KoinActivity"
    val loginPresenter: LoginPresenter by inject()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_loin)

        if (loginPresenter!= null)
            LogUtil.d(TAG, "${loginPresenter.login()}")
    }

}

这样子完成后运行其实是会报错的,这里有一个坑开始注入的时候使用

androidLogger()? 会报错

java.lang.NoSuchMethodError: No virtual method elapsedNow()D in class Lkotlin/time/TimeMark; or its super classes (declaration of 'kotlin.time.TimeMark' appears in /data/app/~~ArLPm6ZwWHpL7fiTI_vDjQ==/com.nova.fraworkproject-QE0TR4fU0SiejzRkgwjc2w==/base.apk)

应该使用如下的设置 *********

androidLogger( Level.NONE)
class MyApplication : Application() {
    private var mActivitRouter: ActivitRouter? = null

    override fun onCreate() {
        super.onCreate()

        startKoin {
            // Level.NONE
            androidLogger( Level.NONE)
            androidContext(this@MyApplication)
            modules(appModule)
        }
    }
}

至于怎么使用就到这里了,如果有帮助到你麻烦点赞加关注,day day up.

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:34:46  更:2022-07-17 16:39:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 2:58:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码