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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android koin -> 正文阅读

[移动开发]Android koin

1.源码地址

1.源码地址

2.作用

1.让代码看起来更简洁

现在是这样创建对象的
在这里插入图片描述

2.解耦

我们有一个类,然后有100个地方使用它,这个时候如果我们要修改构造参数,加入一个参数,那么我们就要修改100个地方;如果过了一个月后,然后有要添加参数,这个时候就又要修改100个地方。而有了它,我们只需要修改你一个地方即可

3.

4.

5.

6.

3.使用

1.简单使用

1.依赖

根build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext {
        kotlin_version = "1.6.21"
        koin_version = "3.2.0"
    }
    repositories {
        mavenLocal()
        mavenCentral()
        google()
    }
}
plugins {
    id 'com.android.application' version '7.2.1' apply false
    id 'com.android.library' version '7.2.1' apply false
    id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
    id 'org.jetbrains.kotlin.jvm' version '1.6.10' apply false
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app的build.gradle

implementation "io.insert-koin:koin-android:$koin_version"

2.类的实际初始化

AppMudule.kt
初始化UserRepositoryImpl(接口为UserRepository),UserPresenter(参数为UserRepository)

package com.cniao5.koin.di

import com.cniao5.koin.UserPresenter
import com.cniao5.koin.UserRepository
import com.cniao5.koin.UserRepositoryImpl
import org.koin.dsl.module

/**
 * 创建日期:2022/12/16 22:54
 * @author 唐门.西门吹雪
 * 类说明:
 */
val appModule= module {
    single<UserRepository> { UserRepositoryImpl() }
    factory { UserPresenter(get()) }
}

详细的类内容
UserRepositoryImpl(接口为UserRepository)

package com.cniao5.koin

interface UserRepository {
    fun findUser(name:String):User?
    fun addUser(users:List<User>)
}
class UserRepositoryImpl :UserRepository{
    private val _users= arrayListOf<User>()
    override fun findUser(name: String): User? {
        return _users.firstOrNull { it.name==name }
    }
    override fun addUser(users: List<User>) {
        _users.addAll(users)
    }
}

UserPresenter

package com.cniao5.koin

class UserPresenter(private val repository:UserRepository) {
    fun sayHello(name:String):String{
        val foundUser=repository.findUser(name)
        return foundUser?.let { "hello '$it' from $this"}?:"User '$name' not found!"
    }
}

3.koin的初始化与加入要使用的appModule(里面包含实际初始化的类)

MyApplication

package com.cniao5.koin

import android.app.Application
import com.cniao5.koin.data.DefaultData.DEFAULT_USERS
import com.cniao5.koin.di.appModule
import org.koin.android.ext.android.inject
import org.koin.android.ext.koin.androidContext
import org.koin.android.ext.koin.androidLogger
import org.koin.core.context.startKoin

/**
 * 创建日期:2022/12/12 0:02
 * @author 唐门.西门吹雪
 * 类说明:
 */
class MyApplication :Application() {
    private val userRepository:UserRepository by inject()
    override fun onCreate() {
        super.onCreate()
        startKoin {
            androidContext(this@MyApplication)
            androidLogger()
            modules(appModule)//这里是实际初始化类的位置
        }
        userRepository.addUser(DEFAULT_USERS)
    }
}

UserRepositoryImpl(接口为UserRepository)

package com.cniao5.koin

interface UserRepository {
    fun findUser(name:String):User?
    fun addUser(users:List<User>)
}
class UserRepositoryImpl :UserRepository{
    private val _users= arrayListOf<User>()
    override fun findUser(name: String): User? {
        return _users.firstOrNull { it.name==name }
    }
    override fun addUser(users: List<User>) {
        _users.addAll(users)
    }
}

DefaultData

package com.cniao5.koin.data

import com.cniao5.koin.User

/**
 * 创建日期:2022/12/18 3:30
 * @author 唐门.西门吹雪
 * 类说明:
 */
object DefaultData {
    val DEFAULT_USER=User("魂兽")
    val DEFAULT_USER2=User("胡列娜","武魂殿")
    val DEFAULT_USERS= listOf(DEFAULT_USER,DEFAULT_USER2)
}

4.类的初始化与类方法的调用

MainActivity

package com.cniao5.koin

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView
import com.cniao5.koin.data.DefaultData
import org.koin.android.ext.android.inject

class MainActivity : AppCompatActivity() {
    private val presenter: UserPresenter by inject()//初始化
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val name = DefaultData.DEFAULT_USER.name
        val textField=findViewById<TextView>(R.id.text)
        textField.text=presenter.sayHello(name+"")//类方法的使用
    }
}

5.在ViewModel中使用

6.拓展

待修改

4.总结与问题反思

1.简单使用

2.ViewModel

3.

4.

5.

6.

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:21:32  更:2022-12-25 11:26:21 
 
开发: 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年4日历 -2024/4/18 8:12:46-

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