<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[windboy2014的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/windboy2014</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; windboy2014]]></copyright><item><title><![CDATA[kotlin之jetpack+mvvm+rxjava+retrofit]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/116116256</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/116116256</guid><author>windboy2014</author><pubDate>Sun, 25 Apr 2021 09:15:46 +0800</pubDate><description><![CDATA[kotlin之jetpack+mvvm+rxjava+retrofit
最近在做新项目，看到kotlin语言，于是对着菜鸟教程看了一下，准备新项目使用kotlin写：
技术组合
1   网络请求框架okHttp 目前对于okhttp支持的比较好的是retrofit框架
2   异步处理采用的是rxjava框架，目前虽然rxjava3.0出来了，但是retrofit目前还没有更新到3.0 所以采用		     									的还是rxjava2.0。
3.对于项目整体框架采用的是mvvm思想，因为使用的是]]></description><category></category></item><item><title><![CDATA[Spring+SpringMvc+Mybatis整合代码]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/96430846</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/96430846</guid><author>windboy2014</author><pubDate>Thu, 18 Jul 2019 14:57:42 +0800</pubDate><description><![CDATA[首先看项目整体目录



一个个来：

首先建表：简单的一个表，用鱼测试跟数据库链接使用的



SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for account
-- ----------------------------‘
create database ssm;
DROP TA...]]></description><category></category></item><item><title><![CDATA[Android Studio和搜狗输入法冲突问题]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/78579145</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/78579145</guid><author>windboy2014</author><pubDate>Mon, 20 Nov 2017 09:34:45 +0800</pubDate><description><![CDATA[自从更新了Android Studio3.0以后，输入法一直卡顿，换了输入法也是不行，于是在网上一直找资料，最后找了很多，终于找到了解决方案。资源下载
http://download.youkuaiyun.com/download/windboy2014/10125227]]></description><category></category></item><item><title><![CDATA[7.9 Async 异步操作 - Start/ToAsync/StartFuture/FromAction/FromCallable/RunAsync]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764521</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764521</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:54:54 +0800</pubDate><description><![CDATA[下面的这些操作符属于单独的rxjava-async模块，它们用于将同步对象转换为Observable。

start( ) —
 创建一个Observable，它发射一个函数的返回值toAsync( ) or asyncAction( ) or asyncFunc( ) —
 将一个函数或者Action转换为已Observable，它执行这个函数并发射函数的返回值startFuture( ]]></description><category></category></item><item><title><![CDATA[7.8 Mathematical 算术和聚合操作 - Average/Concat/Count/Max/Min/Sum/Reduce]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764496</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764496</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:53:14 +0800</pubDate><description><![CDATA[本页展示的操作符用于对整个序列执行算法操作或其它操作，由于这些操作必须等待数据发射完成（通常也必须缓存这些数据），它们对于非常长或者无限的序列来说是危险的，不推荐使用。

rxjava-math 模块的操作符

averageInteger( ) —
 求序列平均数并发射averageLong( ) —
 求序列平均数并发射averageFloat( ) —
 求序列平均数并发射av]]></description><category></category></item><item><title><![CDATA[7.7 Conditional 条件和布尔操作 - All/Amb/Contains/SkipUntil/TakeUntil]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764488</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764488</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:52:39 +0800</pubDate><description><![CDATA[这个页面的操作符可用于根据条件发射或变换Observables，或者对它们做布尔运算：

条件操作符

amb( ) —
 给定多个Observable，只让第一个发射数据的Observable发射全部数据defaultIfEmpty( ) —
 发射来自原始Observable的数据，如果原始Observable没有发射数据，就发射一个默认数据(rxjava-computation-]]></description><category></category></item><item><title><![CDATA[7.6 Utility 辅助操作 - Delay/Do/ObserveOn/SubscribeOn/Subscribe]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764459</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764459</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:50:56 +0800</pubDate><description><![CDATA[这个页面列出了很多用于Observable的辅助操作符

materialize( ) —
 将Observable转换成一个通知列表convert an Observable into a list of Notificationsdematerialize( ) —
 将上面的结果逆转回一个Observabletimestamp( ) —
 给Observable发射的每个数据项添加]]></description><category></category></item><item><title><![CDATA[7.5 Error Handling 错误处理 - Catch/Retry]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764451</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764451</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:50:18 +0800</pubDate><description><![CDATA[很多操作符可用于对Observable发射的onError通知做出响应或者从错误中恢复，例如，你可以：

吞掉这个错误，切换到一个备用的Observable继续发射数据吞掉这个错误然后发射默认值吞掉这个错误并立即尝试重启这个Observable吞掉这个错误，在一些回退间隔后重启这个Observable

这是操作符列表：

onErrorResumeNext( ) —
 指示Obse]]></description><category></category></item><item><title><![CDATA[7.4 Combining 结合操作 - And/StartWith/Join/Merge/Switch/Zip]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764430</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764430</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:48:13 +0800</pubDate><description><![CDATA[这个页面展示的操作符可用于组合多个Observables。

startWith( ) —
 在数据序列的开头增加一项数据merge( ) —
 将多个Observable合并为一个mergeDelayError( ) —
 合并多个Observables，让没有错误的Observable都完成后再发射错误通知zip( ) —
 使用一个函数组合多个Observable发射的数据集合，]]></description><category></category></item><item><title><![CDATA[7.3 Filtering 过滤操作 - Debounce/Distinct/Filter/Sample/Skip/Take]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764412</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764412</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:47:02 +0800</pubDate><description><![CDATA[这个页面展示的操作符可用于过滤和选择Observable发射的数据序列。

filter( ) —
 过滤数据takeLast( ) —
 只发射最后的N项数据last( ) —
 只发射最后的一项数据lastOrDefault( ) —
 只发射最后的一项数据，如果Observable为空就发射默认值takeLastBuffer( ) —
 将最后的N项数据当做单个数据发射skip]]></description><category></category></item><item><title><![CDATA[7.2 Transforming 变换操作 - Buffer/Window/Map/FlatMap/GroupBy/Scan]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764402</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764402</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:46:13 +0800</pubDate><description><![CDATA[这个页面展示了可用于对Observable发射的数据执行变换操作的各种操作符。

map( ) —
 对序列的每一项都应用一个函数来变换Observable发射的数据序列flatMap( ), concatMap( ),
 and flatMapIterable( ) — 将Observable发射的数据集合变换为Observables集合，然后将这些Observable发射的数据平坦化的]]></description><category></category></item><item><title><![CDATA[7.1Creating 创建操作 - Create/Defer/From/Just/Start/Repeat/Range]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764379</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764379</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:44:43 +0800</pubDate><description><![CDATA[这个页面展示了创建Observable的各种方法。

just( ) —
 将一个或多个对象转换成发射这个或这些对象的一个Observablefrom( ) —
 将一个Iterable, 一个Future, 或者一个数组转换成一个Observablerepeat( ) —
 创建一个重复发射指定数据或数据序列的ObservablerepeatWhen( ) —
 创建一个重复发射指定]]></description><category></category></item><item><title><![CDATA[7.Operators Categories - 按目录分类的主要操作符列表]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764354</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764354</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:43:45 +0800</pubDate><description><![CDATA[ReactiveX的每种编程语言的实现都实现了一组操作符的集合。不同的实现之间有很多重叠的部分，也有一些操作符只存在特定的实现中。每种实现都倾向于用那种编程语言中他们熟悉的上下文中相似的方法给这些操作符命名。

本文首先会给出ReactiveX的核心操作符列表和对应的文档链接，后面还有一个决策树用于帮助你根据具体的场景选择合适的操作符。最后有一个语言特定实现的按字母排序的操作符列表。

如]]></description><category></category></item><item><title><![CDATA[6.All Operators List - 按字母顺序的全部操作符列表]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764338</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764338</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:42:40 +0800</pubDate><description><![CDATA[按字母顺序排列的全部操作符列表

aggregate( ) — see reduce( )all( ) —
 determine whether all items emitted by an Observable meet some criteriaamb( ) —
 given two or more source Observables, emits all of the items]]></description><category></category></item><item><title><![CDATA[5.Scheduler - 介绍了各种异步任务调度和默认调度器]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764316</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764316</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:41:27 +0800</pubDate><description><![CDATA[调度器 Scheduler

如果你想给Observable操作符链添加多线程功能，你可以指定操作符（或者特定的Observable）在特定的调度器(Scheduler)上执行。

某些ReactiveX的Observable操作符有一些变体，它们可以接受一个Scheduler参数。这个参数指定操作符将它们的部分或全部任务放在一个特定的调度器上执行。

使用ObserveOn和Subs]]></description><category></category></item><item><title><![CDATA[4.Subject - Observable和Observer的复合体，也是二者的桥梁]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764289</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764289</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:39:45 +0800</pubDate><description><![CDATA[Subject

Subject可以看成是一个桥梁或者代理，在某些ReactiveX实现中（如RxJava），它同时充当了Observer和Observable的角色。因为它是一个Observer，它可以订阅一个或多个Observable；又因为它是一个Observable，它可以转发它收到(Observe)的数据，也可以发射新的数据。

由于一个Subject订阅一个Observable]]></description><category></category></item><item><title><![CDATA[3.Single - 一种特殊的只发射单个值的Observable]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764281</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764281</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:39:01 +0800</pubDate><description><![CDATA[Single

介绍

RxJava（以及它派生出来的RxGroovy和RxScala）中有一个名为Single的Observable变种。

Single类似于Observable，不同的是，它总是只发射一个值，或者一个错误通知，而不是发射一系列的值。

因此，不同于Observable需要三个方法onNext, onError, onCompleted，订阅Single只需要两]]></description><category></category></item><item><title><![CDATA[2.Observables - 简要介绍Observable的观察者模型]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764259</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764259</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:35:57 +0800</pubDate><description><![CDATA[Observable

概述

在ReactiveX中，一个观察者(Observer)订阅一个可观察对象(Observable)。观察者对Observable发射的数据或数据序列作出响应。这种模式可以极大地简化并发操作，因为它创建了一个处于待命状态的观察者哨兵，在未来某个时刻响应Observable的通知，不需要阻塞等待Observable发射数据。

这篇文章会解释什么是响应式编程模]]></description><category></category></item><item><title><![CDATA[1.ReactiveX - 什么是Rx，Rx的理念和优势]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52764241</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52764241</guid><author>windboy2014</author><pubDate>Sun, 09 Oct 2016 10:34:36 +0800</pubDate><description><![CDATA[ReactiveX

http://reactivex.io/intro.html


Rx介绍

ReactiveX的历史

ReactiveX是Reactive Extensions的缩写，一般简写为Rx，最初是LINQ的一个扩展，由微软的架构师Erik Meijer领导的团队开发，在2012年11月开源，Rx是一个编程模型，目标是提供一致的编程接口，帮助开发者更方便的处理异]]></description><category></category></item><item><title><![CDATA[RxCache使用教程]]></title><link>https://blog.youkuaiyun.com/windboy2014/article/details/52711188</link><guid>https://blog.youkuaiyun.com/windboy2014/article/details/52711188</guid><author>windboy2014</author><pubDate>Fri, 30 Sep 2016 14:39:09 +0800</pubDate><description><![CDATA[以简单快捷的方式实现Android app实现网络数据缓存并不是一件容易的事

就像Sina微博Android客户端实现数据缓存离线阅读微博那样

这是一个基于 Retrofit的Reactive缓存库，可用于Android 和Java。能够将你的缓存成需求转成一个接口

配置

添加JitPack仓库在你的build.gradle文件 (项目根目录下):

allprojec]]></description><category></category></item></channel></rss>