From 38f2f89867e04a8fd4ab22a99b01e477b6f59dd1 Mon Sep 17 00:00:00 2001 From: niqibiao Date: Wed, 18 Jan 2017 17:14:43 +0800 Subject: [PATCH 1/9] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8DLogFragment=20=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=BB=91=E5=8A=A8=E5=88=B0=E6=9C=80=E5=BA=95=E9=83=A8?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 7 ++----- .../maat/hello_rxjava/common/logger/LogFragment.java | 9 ++++++++- build.gradle | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5ee223d..392faf1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' apply plugin: 'android-apt' android { compileSdkVersion 24 - buildToolsVersion "24.0.3" + buildToolsVersion '25.0.0' defaultConfig { applicationId "com.demo.maat.hello_rxjava" minSdkVersion 16 @@ -20,16 +20,14 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:24.2.1' testCompile 'junit:junit:4.12' - compile 'com.jakewharton:butterknife:8.4.0' apt 'com.jakewharton:butterknife-compiler:8.4.0' - compile 'io.reactivex:rxandroid:1.0.1' // Because RxAndroid releases are few and far between, it is recommended you also // explicitly depend on RxJava's latest version for bug fixes and new features. @@ -41,6 +39,5 @@ dependencies { compile 'com.squareup.retrofit2:converter-gson:+' compile 'com.squareup.retrofit2:adapter-rxjava:+' compile 'com.google.code.gson:gson:+' - compile 'io.reactivex:rxandroid:1.2.1' } diff --git a/app/src/main/java/com/demo/maat/hello_rxjava/common/logger/LogFragment.java b/app/src/main/java/com/demo/maat/hello_rxjava/common/logger/LogFragment.java index 69256ff..5265f7d 100644 --- a/app/src/main/java/com/demo/maat/hello_rxjava/common/logger/LogFragment.java +++ b/app/src/main/java/com/demo/maat/hello_rxjava/common/logger/LogFragment.java @@ -98,7 +98,14 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { - mScrollView.fullScroll(ScrollView.FOCUS_DOWN); + //afterTextChanged 在 text发生改变后马上被调用,此时可能text还未被绘制,导致无法滑动到最底部 + //所以不能直接调用,而应该使用post + mScrollView.post(new Runnable(){ + @Override + public void run() { + mScrollView.fullScroll(ScrollView.FOCUS_DOWN); + } + }); } }); return result; diff --git a/build.gradle b/build.gradle index 5a80b7d..aeba529 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:2.2.3' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 691bc943e6bae9391090566ea7bb81a992605fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Mon, 13 Feb 2017 20:07:42 +0800 Subject: [PATCH 2/9] Update README.md --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b666b62..e7467b2 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,8 @@ # Learning RxJava(RxJava详解) -RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。 - - - - +RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。就是用最简单移动的方式把Rxjava讲明白。 +**为什么做这个项目:**学习Rxjava相信所有人都看过扔物线的《给Android开发者Rxjava的详解》,这片文章后半部分讲对线程的操作,相信很多人不是很容易看懂。这个项目 ## Screenshots From 6625f9e637fc63f8d682737731ce0115872b2229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Mon, 13 Feb 2017 20:09:11 +0800 Subject: [PATCH 3/9] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7467b2..f797c10 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # Learning RxJava(RxJava详解) +**为什么做这个项目:**学习Rxjava相信所有人都看过扔物线的《给Android开发者Rxjava的详解》,这片文章后半部分讲对线程的操作,相信很多人不是很容易看懂。这个项目 RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。就是用最简单移动的方式把Rxjava讲明白。 -**为什么做这个项目:**学习Rxjava相信所有人都看过扔物线的《给Android开发者Rxjava的详解》,这片文章后半部分讲对线程的操作,相信很多人不是很容易看懂。这个项目 + ## Screenshots From b3bf5fe9e50857ada11bd7e39c74bb8df4b86113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Sat, 18 Feb 2017 09:26:03 +0800 Subject: [PATCH 4/9] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index f797c10..35a62aa 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # Learning RxJava(RxJava详解) -**为什么做这个项目:**学习Rxjava相信所有人都看过扔物线的《给Android开发者Rxjava的详解》,这片文章后半部分讲对线程的操作,相信很多人不是很容易看懂。这个项目 - +**为什么做这个项目:**学习Rxjava相信所有人都看过扔物线的《给Android开发者Rxjava的详解》,这片文章后半部分讲对线程的操作,相信很多人不是很容易看懂。这个项目通过最简单的方式,把Rxjava最核心的内容讲清楚,所以,在学习这个项目前先看扔物线大哥的文章 RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。就是用最简单移动的方式把Rxjava讲明白。 From 396b6139e883b818c112bbc6d85e19d0b92f007b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Sun, 30 Apr 2017 16:44:04 +0800 Subject: [PATCH 5/9] Update README.md --- README.md | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 35a62aa..2bd8738 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,13 @@ # Learning RxJava(RxJava详解) -**为什么做这个项目:**学习Rxjava相信所有人都看过扔物线的《给Android开发者Rxjava的详解》,这片文章后半部分讲对线程的操作,相信很多人不是很容易看懂。这个项目通过最简单的方式,把Rxjava最核心的内容讲清楚,所以,在学习这个项目前先看扔物线大哥的文章 +**为什么做这个项目:** 学习Rxjava,基本所有人都会看扔物线的《给Android开发者Rxjava的详解》,可以说是国内最理想的Rxjava教程了。这片文章后半部分讲对线程的操作,相信很多人都不太懂。这个项目通过最简单的方式,对Rxjava线程操作的进行讲解,让大家彻底明白Rxjava的核心内容。所以,在学习这个项目前先看扔物线大哥的文章。 -RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。就是用最简单移动的方式把Rxjava讲明白。 +RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。就是用最简单移动的方式把Rxjava讲明白. ## Screenshots - - - - + |  | + ## 详解 (Details Explain) 我们可以把Schedulers看作线程控制符,一共五种线程控制符,可以通过这些线程控制符切换不同的线程。以下是五种线程控制符的区别: @@ -34,51 +32,50 @@ RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使 ` 其实我们常用的就2种:Schedulers.io()和AndroidSchedulers.mainThread()` - **Note:** Schedulers.io() and AndroidSchedulers.mainThread() are the most common one - > 以下几个例子都是使用Observable.just(1,2,3)创建被观察对象,观察者输出1,2,3. > This example show how to use make a few threads that we can watch their actions -####1. 基本使用 +#### 1. 基本使用 -####2. 使用 subscribeOn(Schedulers.io())设置被观察者的线程 + +#### 2. 使用 subscribeOn(Schedulers.io())设置被观察者的线程 > 以下几个例子中看不出被观察者发生在什么线程,使用Observeble.create()创建被观察者可以看出发生在什么线程,可参看源码中的其它Demo。 -####3. 使用 subscribeOn(Schedulers.io()) 和 observeOn() 设置被观察者和观察者的线程 +#### 3. 使用 subscribeOn(Schedulers.io()) 和 observeOn() 设置被观察者和观察者的线程 -####4. 使用Schedulers.io()指定被观察者产生事件的线程,然后使用Map对数据转换,这里只是在每个数据后面加‘a’。 +#### 4. 使用Schedulers.io()指定被观察者产生事件的线程,然后使用Map对数据转换,这里只是在每个数据后面加‘a’。 -####5. 使用Schedulers.io()指定被观察者产生事件的线程,使用Map对数据转换,在每个数据后面加‘a’,使用AndroidSchedulers.mainThread()切换到主线程,然后使用Map变换,每个数据后加‘b’,输出结果。 +#### 5. 使用Schedulers.io()指定被观察者产生事件的线程,使用Map对数据转换,在每个数据后面加‘a’,使用AndroidSchedulers.mainThread()切换到主线程,然后使用Map变换,每个数据后加‘b’,输出结果。 -####6. 使用Schedulers.io()指定被观察者产生事件的线程,使用Map对数据转换,在每个数据后面加‘a’,使用AndroidSchedulers.mainThread()切换到主线程,然后使用Map变换,每个数据后加‘b’,再用Schedulers.io()切换线程,用Map对数据加‘c’,输出结果。 +#### 6. 使用Schedulers.io()指定被观察者产生事件的线程,使用Map对数据转换,在每个数据后面加‘a’,使用AndroidSchedulers.mainThread()切换到主线程,然后使用Map变换,每个数据后加‘b’,再用Schedulers.io()切换线程,用Map对数据加‘c’,输出结果。 -####7.这个例子不同的是使用了两次subscribeOn()来指定被观察者的线程,最终最上面的subscribeOn()起作用,下面的subscribeOn()不起作用。然后使用Map对数据转换,这里只是在每个数据后面加‘a’,使用Schedulers.io()切换线程,然后使用Map变换,每个数据后加‘b’,再用AndroidSchedulers.mainThread()切换主线程,用Map对数据加‘c’,最后再切换到非主线程,输出结果。 +#### 7.这个例子不同的是使用了两次subscribeOn()来指定被观察者的线程,最终最上面的subscribeOn()起作用,下面的subscribeOn()不起作用。然后使用Map对数据转换,这里只是在每个数据后面加‘a’,使用Schedulers.io()切换线程,然后使用Map变换,每个数据后加‘b’,再用AndroidSchedulers.mainThread()切换主线程,用Map对数据加‘c’,最后再切换到非主线程,输出结果。 - + @@ -86,7 +83,7 @@ RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使 `更多的例子请看源码` -##About me +## About me An android developer in Beijing.Welcome to offer me an [Interview invitation](mailto:maat.xing@gmail.com). If you have any new idea about this project, feel free to [contact me](mailto:maat.xing@gmail.com). :smiley: From 4f91e6ce373eab3ab55baf7099878b0cca600026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Sun, 30 Apr 2017 16:52:45 +0800 Subject: [PATCH 6/9] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2bd8738..c15b899 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使 >最终发现设置被观察者的线程只有最上面的起作用,下面的不起作用。 + `更多的例子请看源码` ## About me From 7771b6ef1f532cafeba83a6b5f7e3e27f921e74a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Sun, 30 Apr 2017 16:58:38 +0800 Subject: [PATCH 7/9] Update README.md --- README.md | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index c15b899..a86fc63 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使 ## Screenshots - |  | + ## 详解 (Details Explain) @@ -38,45 +38,39 @@ RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使 #### 1. 基本使用 - - + + #### 2. 使用 subscribeOn(Schedulers.io())设置被观察者的线程 - - + > 以下几个例子中看不出被观察者发生在什么线程,使用Observeble.create()创建被观察者可以看出发生在什么线程,可参看源码中的其它Demo。 #### 3. 使用 subscribeOn(Schedulers.io()) 和 observeOn() 设置被观察者和观察者的线程 - - + #### 4. 使用Schedulers.io()指定被观察者产生事件的线程,然后使用Map对数据转换,这里只是在每个数据后面加‘a’。 - - + #### 5. 使用Schedulers.io()指定被观察者产生事件的线程,使用Map对数据转换,在每个数据后面加‘a’,使用AndroidSchedulers.mainThread()切换到主线程,然后使用Map变换,每个数据后加‘b’,输出结果。 - - + #### 6. 使用Schedulers.io()指定被观察者产生事件的线程,使用Map对数据转换,在每个数据后面加‘a’,使用AndroidSchedulers.mainThread()切换到主线程,然后使用Map变换,每个数据后加‘b’,再用Schedulers.io()切换线程,用Map对数据加‘c’,输出结果。 - - + #### 7.这个例子不同的是使用了两次subscribeOn()来指定被观察者的线程,最终最上面的subscribeOn()起作用,下面的subscribeOn()不起作用。然后使用Map对数据转换,这里只是在每个数据后面加‘a’,使用Schedulers.io()切换线程,然后使用Map变换,每个数据后加‘b’,再用AndroidSchedulers.mainThread()切换主线程,用Map对数据加‘c’,最后再切换到非主线程,输出结果。 - - + >最终发现设置被观察者的线程只有最上面的起作用,下面的不起作用。 From 35b656dff444cb9b490b8d3b5dfba6ef77e4dabf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Sun, 30 Apr 2017 17:00:36 +0800 Subject: [PATCH 8/9] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a86fc63..f6ec7ad 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Learning RxJava(RxJava详解) -**为什么做这个项目:** 学习Rxjava,基本所有人都会看扔物线的《给Android开发者Rxjava的详解》,可以说是国内最理想的Rxjava教程了。这片文章后半部分讲对线程的操作,相信很多人都不太懂。这个项目通过最简单的方式,对Rxjava线程操作的进行讲解,让大家彻底明白Rxjava的核心内容。所以,在学习这个项目前先看扔物线大哥的文章。 +**为什么做这个项目:** 学习Rxjava,基本所有人都会看扔物线的《给Android开发者Rxjava的详解》,可以说是国内最理想的Rxjava教程了。这片文章后半部分讲对线程的操作,相信很多人都不太懂。这个项目通过最简单的方式,对Rxjava线程操作的进行讲解,让大家彻底明白Rxjava的核心内容。所以,在学习这个项目前先看扔物线大哥的文章。 RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。就是用最简单移动的方式把Rxjava讲明白. From 5969c976b5eeba764bc65cbc7d946c7a2f596210 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maat=E7=BA=A2=E9=A3=9E?= Date: Sun, 30 Apr 2017 17:02:19 +0800 Subject: [PATCH 9/9] Update README.md --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index f6ec7ad..1fa9c19 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,6 @@ RxJava的精妙之处就是异步操作极其方便,也就是Schedulers的使用,本项目可以让大家彻底掌握Schedulers的使用,还有常用的操作符、RxAndroid...的使用详解。就是用最简单移动的方式把Rxjava讲明白. -## Screenshots - - - - ## 详解 (Details Explain) 我们可以把Schedulers看作线程控制符,一共五种线程控制符,可以通过这些线程控制符切换不同的线程。以下是五种线程控制符的区别: