Android koin

news2024/11/15 12:02:04

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎样让chatGPT给你打工然后月入过千?

前言 chatGPT最近火出圈了&#xff0c;怎么薅一个文字模型给你打工呢&#xff1f; 这个UP给了个思路&#xff1a;哔哩哔哩 emmm有点尴尬&#xff0c;可能是热度比较高&#xff0c;b站的视频作者自己下架了。 总结一下&#xff1a; 薅的对象百度文库创作中心&#xff1a;地址…

设计模式之装饰器模式

decorator design pattern 装饰模式的概念、装饰模式的结构、装饰模式的优缺点、装饰模式的使用场景、装饰模式与代理模式的区别、装饰模式的实现示例、装饰模式的源码分析 1、装饰模式的概念 装饰模式&#xff0c;即在不改变现有对象结构的前提下&#xff0c;动态的给对象增加…

【云原生】Grafana 介绍与实战操作

文章目录一、概述二、Grafana 安装1&#xff09;下载安装2&#xff09;安装包信息3&#xff09;启动服务4&#xff09;Grafana 访问三、Grafana 功能介绍四、使用mysql存储1&#xff09;安装mysql2&#xff09;修改grafana配置1、创建grafana用户和grafana库2、修改grafana配置…

[附源码]Python计算机毕业设计Django学分制环境下本科生学业预警帮扶系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Innodb存储引擎-索引和算法(B+树索引、Cardinality、联合索引、覆盖索引、MRR优化、ICP优化、哈希索引、全文索引)

文章目录索引和算法B树索引聚集索引辅助索引B 树索引的分裂B 树索引的管理Cardinality 值B 树索引的使用联合索引覆盖索引优化器选择不使用索引的情况索引提示Multi-Range Read 优化(MRR)Index Condition Pushdown优化(ICP)哈希索引全文索引倒排索引InnoDB全文检索的实现全文检…

第一个MyBatis查询

⭐️前言⭐️ 在连接程序与数据库的工具中&#xff0c;我们之前使用的是JDBC技术&#xff0c;但是JDBC的操作流程极为繁琐&#xff0c;因此才有了更优秀框架——MyBatis&#xff0c;下边我们一起来看这个优秀框架MyBatis的操作与使用。 &#x1f349;欢迎点赞 &#x1f44d; 收…

Innodb存储引擎-锁(数据库锁的查看、快照读当前读、MVCC、自增长与锁、外键与锁、行锁、并发事务的问题、阻塞、死锁、锁升级、锁的实现)

文章目录锁lock 与latch读锁/写锁/意向锁INNODB_TRX/INNODB_LOCKS/INNODB_LOCK_WAITS一致性非锁定读(快照读)一致性锁定读(当前读)MVCC版本链Read View流程自增长与锁外键和锁行锁类型记录锁(record lock)间隙锁(gap lock)下一键锁(next-key lock)并发事务带来的问题阻塞死锁锁…

数据挖掘Java——DBSCAN算法的实现

一、DBSCAN算法的前置知识 DBSCAN算法&#xff1a;如果一个点q的区域内包含多于MinPts个对象&#xff0c;则创建一个q作为核心对象的簇。然后&#xff0c;反复地寻找从这些核心对象直接密度可达的对象&#xff0c;把一些密度可达簇进行合并。当没有新的点可以被添加到任何簇时…

7.加载properties属性文件

一、加载properties属性文件 目的&#xff1a;将数据库的连接参数抽取到一个单独的文件中&#xff0c;与Spring配置文件解耦 1. 编写jdbc.properties属性文件 jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://127.0.0.1:3306/spring_db jdbc.usernameroot jdbc.passwo…

基于萤火虫算法改进的DELM预测-附代码

萤火虫算法改进的深度极限学习机DELM的回归预测 文章目录萤火虫算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机&#xff08;DELM&#xff09;原理3.萤火虫算法4.萤火虫算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考&#xff1…

代码中的坏味道

学习笔记自https://zhuanlan.zhihu.com/p/141435233 识别代码中的坏味道系列 如下图是工作中常见的代码的坏味道&#xff1a; 上图中的坏味道出自《重构》这本书&#xff0c;虽然并不是全部&#xff0c;但是涵盖了日常中最常见的一些代码坏味道。 接触这些坏代码可以分为三类&…

【Linux】shell 及权限理解

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;shell命令…

计算机基础学习笔记:操作系统篇之硬件结构,存储层次结构

二、存储器的层次结构 本文知识来源小林Coding阅读整理思考&#xff0c;原文链接请见该篇文章 存储层次 寄存器高速缓存&#xff0c;Cache 1-3级内存磁盘&#xff08;SSD&#xff0c;HDD&#xff09; 关键点 各层次的存储的 介质、速度、容量 以及工作层次理解CPU Cache的作…

【Spring]SpringMVC

一、SpringMVC简介 1、什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M&#xff1a;Model&#xff0c;模型层。指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 实体类Bean&#xff1a;专门存储业务数据…

【qt Spin Box | Double Spin Box输入小部件函数学习篇】

Spin Box | Double Spin Box输入小部件函数学习篇【1】UI设计布局【2】setMinimum | setMaximum【3】setPrefix | setSuffix【4】setValue【5】setDisplayIntegerBase【6】setSingleStep【7】value【8】举例【1】UI设计布局 【2】setMinimum | setMaximum setMinimum 此属性保持…

点对点网络与广播式网络的区别

目录 一、点对点网络与广播式网络的区别 二、结点和节点 一、点对点网络与广播式网络的区别 写下本文的原因是笔者在学习计算机网络第一章时看到了下面王道书上的一句话&#xff0c;我不理解这句话想表达的是谁需要“分组存储转发和路由选择机制”。于是当时得出了一个错误…

Python读取excel内容追加到mysql表中赋予字段注释

前言 由于最近遇到一个实体类有特别多的字段&#xff0c;我就想自己一个地在表中创建&#xff0c;并写注释未免太浪费人力和时间了&#xff0c;然后在网上查找资料&#xff0c;果不其然让我看到了一个可以使用Python读取excel内容追加到mysql表中赋予字段注释&#xff0c;这简…

前端零碎知识随笔

一、介绍 本篇博客主要使用来记录一些比较零碎的知识点&#xff0c;都是本人在日常开发工作中遇到的&#xff0c;或者是在学习过程中遇到的。因为这些知识点都比较零碎&#xff0c;为了防止遗忘&#xff0c;所以特意写一篇博客来记录&#xff0c;后面也不会不断慢慢更新的。 …

[附源码]计算机毕业设计Python-大学生健康档案管理(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

JSP+MySQL基于ssm的环保数据自动采集及预测系统

在21世纪的今天,随着科技的进步和发展,人们的生活逐渐趋于自动化、便捷化、数据化。而发展总会有代价,科技的进步总是伴随着环境的恶化。人类用智慧将地球的资源充分利用,以便丰富人们的生活,推动国家的进步。回过头去看,地球的环境已经成为威胁人类长久生存的主要问题之一。在…