From b5f46ac6c6278afa5b48958bda4b569bb4f4b317 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 16 Aug 2017 17:55:23 +0800 Subject: [PATCH] update rxjava2 --- .idea/gradle.xml | 3 +- .idea/misc.xml | 42 +- .idea/vcs.xml | 6 + .idea/workspace.xml | 742 ++++++++++++++++++ build.gradle | 16 +- gradle.properties | 17 + .../java/com/corelibs/api/ApiFactory.java | 4 +- .../com/corelibs/api/ResponseTransformer.java | 38 +- .../java/com/corelibs/base/BaseActivity.java | 17 +- .../java/com/corelibs/base/BaseFragment.java | 22 +- .../java/com/corelibs/base/BasePresenter.java | 15 +- src/main/java/com/corelibs/base/BaseView.java | 12 +- .../corelibs/subscriber/ResponseAction.java | 7 +- .../corelibs/subscriber/ResponseHandler.java | 3 +- .../subscriber/ResponseSubscriber.java | 15 +- .../corelibs/subscriber/RxBusSubscriber.java | 8 +- .../java/com/corelibs/utils/rxbus/RxBus.java | 30 +- .../utils/uploader/ImageUploadHelper.java | 52 +- 18 files changed, 924 insertions(+), 125 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 gradle.properties diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f4f39e8..1647e20 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,8 +3,9 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index a8c1b44..1d77643 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,29 @@ + + + + @@ -10,26 +34,10 @@ - + - - - - - 1.7 - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..8f98d4b --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,742 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1502875016933 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 6302d89..55c309d 100644 --- a/build.gradle +++ b/build.gradle @@ -22,18 +22,20 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:23.2.0' compile 'com.android.support:support-v4:23.0.2' + +// compile 'io.reactivex.rxjava2:rxandroid:2.0.1' + compile 'io.reactivex.rxjava2:rxjava:2.1.2' + compile 'com.trello.rxlifecycle2:rxlifecycle:2.1.0' + compile 'com.trello.rxlifecycle2:rxlifecycle-components:2.1.0' + compile 'com.squareup.retrofit2:retrofit:2.3.0' + compile 'com.squareup.retrofit2:converter-gson:2.3.0' + compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' + compile 'com.squareup.okhttp3:logging-interceptor:3.6.0' compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar' compile 'jp.wasabeef:glide-transformations:2.0.1' compile 'com.nineoldandroids:library:2.4.0' - compile 'io.reactivex:rxjava:1.1.6' - compile 'io.reactivex:rxandroid:1.2.1' compile 'com.jakewharton:butterknife:7.0.1' - compile 'com.trello:rxlifecycle:0.6.1' - compile 'com.trello:rxlifecycle-components:0.6.1' - compile 'com.squareup.retrofit2:retrofit:2.1.0' - compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' - compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.okhttp3:okhttp:3.3.1' compile 'cn.finalteam:galleryfinal:1.4.8.7' compile 'com.liulishuo.filedownloader:library:0.3.2' diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..6795398 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,17 @@ +## Project-wide Gradle settings. +# +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +#Wed Aug 16 17:16:58 CST 2017 +systemProp.http.proxyHost=mirrors.neusoft.edu.cn +systemProp.http.proxyPort=80 diff --git a/src/main/java/com/corelibs/api/ApiFactory.java b/src/main/java/com/corelibs/api/ApiFactory.java index cf4a82a..6657506 100644 --- a/src/main/java/com/corelibs/api/ApiFactory.java +++ b/src/main/java/com/corelibs/api/ApiFactory.java @@ -31,7 +31,7 @@ import okhttp3.OkHttpClient; import retrofit2.Retrofit; -import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** @@ -207,7 +207,7 @@ public Timestamp deserialize(JsonElement json, Type typeOfT, } builder.baseUrl(baseUrl) - .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create(gsonBuilder.create())); OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); diff --git a/src/main/java/com/corelibs/api/ResponseTransformer.java b/src/main/java/com/corelibs/api/ResponseTransformer.java index 0ea4f25..2b41096 100644 --- a/src/main/java/com/corelibs/api/ResponseTransformer.java +++ b/src/main/java/com/corelibs/api/ResponseTransformer.java @@ -1,33 +1,29 @@ package com.corelibs.api; -import rx.Observable; -import rx.android.schedulers.AndroidSchedulers; -import rx.schedulers.Schedulers; + +import com.trello.rxlifecycle2.LifecycleTransformer; + +import org.reactivestreams.Publisher; + +import io.reactivex.Flowable; +import io.reactivex.FlowableTransformer; +import io.reactivex.Observable; +import io.reactivex.ObservableSource; +import io.reactivex.ObservableTransformer; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.annotations.NonNull; +import io.reactivex.schedulers.Schedulers; +import io.reactivex.subscribers.SafeSubscriber; /** * 用于对网络请求的Observable做转换. - *
- * 配合{@link BaseRxPresenter#bindLifeCycle()}一起使用 - * 可以将原始Observable绑定至Activity/Fragment生命周期, 同时声明在IO线程运行, 在main线程接收. - *
* Created by Ryan on 2015/12/30. */ -public class ResponseTransformer implements Observable.Transformer { - - private Observable.Transformer transformer; - - public ResponseTransformer() {} - - public ResponseTransformer(Observable.Transformer t) { - transformer = t; - } +public class ResponseTransformer implements FlowableTransformer { @Override - public Observable call(Observable source) { - if(transformer != null) - return transformer.call(source).subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()); - else + public Publisher apply(@NonNull Flowable source) { + return source.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } diff --git a/src/main/java/com/corelibs/base/BaseActivity.java b/src/main/java/com/corelibs/base/BaseActivity.java index 6e7b0f1..f802cb8 100644 --- a/src/main/java/com/corelibs/base/BaseActivity.java +++ b/src/main/java/com/corelibs/base/BaseActivity.java @@ -14,12 +14,13 @@ import com.corelibs.common.AppManager; import com.corelibs.utils.ToastMgr; import com.corelibs.views.LoadingDialog; -import com.trello.rxlifecycle.ActivityEvent; -import com.trello.rxlifecycle.FragmentEvent; -import com.trello.rxlifecycle.components.support.RxAppCompatActivity; +import com.trello.rxlifecycle2.LifecycleTransformer; +import com.trello.rxlifecycle2.android.ActivityEvent; +import com.trello.rxlifecycle2.android.FragmentEvent; +import com.trello.rxlifecycle2.components.support.RxAppCompatActivity; import butterknife.ButterKnife; -import rx.Observable; + /** * Activity基类, 继承自此类的Activity需要实现{@link #getLayoutId},{@link #init} @@ -172,20 +173,22 @@ public void hideEmptyHint() {} public void showEmptyHint() {} @Override - public Observable.Transformer bind() { + public LifecycleTransformer bind() { return bindToLifecycle(); } @Override - public Observable.Transformer bindUntil(ActivityEvent event) { + public LifecycleTransformer bindUntil(ActivityEvent event) { return bindUntilEvent(event); } @Override - public Observable.Transformer bindUntil(FragmentEvent event) { + public LifecycleTransformer bindUntil(FragmentEvent event) { return null; } + + /** * 设置全屏模式,并将状态栏设置为透明,支持4.4及以上系统 */ diff --git a/src/main/java/com/corelibs/base/BaseFragment.java b/src/main/java/com/corelibs/base/BaseFragment.java index 90beb58..376f47c 100644 --- a/src/main/java/com/corelibs/base/BaseFragment.java +++ b/src/main/java/com/corelibs/base/BaseFragment.java @@ -3,20 +3,19 @@ import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.WindowManager; -import com.trello.rxlifecycle.ActivityEvent; -import com.trello.rxlifecycle.FragmentEvent; -import com.trello.rxlifecycle.components.support.RxFragment; +import com.trello.rxlifecycle2.LifecycleTransformer; +import com.trello.rxlifecycle2.android.ActivityEvent; +import com.trello.rxlifecycle2.android.FragmentEvent; +import com.trello.rxlifecycle2.components.support.RxFragment; import butterknife.ButterKnife; -import rx.Observable; + /** * Fragment基类, 继承自此类的Fragment需要实现{@link #getLayoutId}, {@link #init} @@ -154,19 +153,20 @@ public Context getViewContext() { return getActivity(); } + @Override - public Observable.Transformer bind() { + public LifecycleTransformer bind() { return bindToLifecycle(); } @Override - public Observable.Transformer bindUntil(FragmentEvent event) { - return bindUntilEvent(event); + public LifecycleTransformer bindUntil(ActivityEvent event) { + return null; } @Override - public Observable.Transformer bindUntil(ActivityEvent event) { - return null; + public LifecycleTransformer bindUntil(FragmentEvent event) { + return bindUntilEvent(event); } /** diff --git a/src/main/java/com/corelibs/base/BasePresenter.java b/src/main/java/com/corelibs/base/BasePresenter.java index 4ab619b..655817a 100644 --- a/src/main/java/com/corelibs/base/BasePresenter.java +++ b/src/main/java/com/corelibs/base/BasePresenter.java @@ -3,10 +3,10 @@ import android.content.Context; import com.corelibs.api.ApiFactory; -import com.trello.rxlifecycle.ActivityEvent; -import com.trello.rxlifecycle.FragmentEvent; +import com.trello.rxlifecycle2.LifecycleTransformer; +import com.trello.rxlifecycle2.android.ActivityEvent; +import com.trello.rxlifecycle2.android.FragmentEvent; -import rx.Observable; /** * Presenter基类, Fragment需使用继承自此类的子类, 泛型需传入继承自{@link BaseView}的MVPView. @@ -83,15 +83,18 @@ protected Context getContext() { return view.getViewContext(); } - protected Observable.Transformer bindToLifeCycle() { + + protected LifecycleTransformer bindToLifeCycle() { return view.bind(); } - protected Observable.Transformer bindUntilEvent(ActivityEvent event) { + + protected LifecycleTransformer bindUntilEvent(ActivityEvent event) { return view.bindUntil(event); } - protected Observable.Transformer bindUntilEvent(FragmentEvent event) { + + protected LifecycleTransformer bindUntilEvent(FragmentEvent event) { return view.bindUntil(event); } diff --git a/src/main/java/com/corelibs/base/BaseView.java b/src/main/java/com/corelibs/base/BaseView.java index 738b7df..c5966ba 100644 --- a/src/main/java/com/corelibs/base/BaseView.java +++ b/src/main/java/com/corelibs/base/BaseView.java @@ -2,10 +2,10 @@ import android.content.Context; -import com.trello.rxlifecycle.ActivityEvent; -import com.trello.rxlifecycle.FragmentEvent; +import com.trello.rxlifecycle2.LifecycleTransformer; +import com.trello.rxlifecycle2.android.ActivityEvent; +import com.trello.rxlifecycle2.android.FragmentEvent; -import rx.Observable; /** * MVPView基础接口 @@ -44,9 +44,9 @@ public interface BaseView { */ Context getViewContext(); - Observable.Transformer bind(); + LifecycleTransformer bind(); - Observable.Transformer bindUntil(FragmentEvent event); + LifecycleTransformer bindUntil(FragmentEvent event); - Observable.Transformer bindUntil(ActivityEvent event); + LifecycleTransformer bindUntil(ActivityEvent event); } diff --git a/src/main/java/com/corelibs/subscriber/ResponseAction.java b/src/main/java/com/corelibs/subscriber/ResponseAction.java index 0d94a23..16cb148 100644 --- a/src/main/java/com/corelibs/subscriber/ResponseAction.java +++ b/src/main/java/com/corelibs/subscriber/ResponseAction.java @@ -3,7 +3,8 @@ import com.corelibs.base.BaseView; import com.corelibs.subscriber.ResponseHandler.IBaseData; -import rx.functions.Func1; +import io.reactivex.functions.Function; + /** * 适用于一个网络请求依赖于另一个网络请求结果的情况. @@ -16,7 +17,7 @@ * 并且返回true. * */ -public abstract class ResponseAction implements Func1, +public abstract class ResponseAction implements Function, ResponseHandler.CustomHandler { private ResponseHandler handler; @@ -30,7 +31,7 @@ public ResponseAction(BaseView view) { } @Override - public R call(T t) { + public R apply(T t) { IBaseData data; if (t instanceof IBaseData) { data = (IBaseData) t; diff --git a/src/main/java/com/corelibs/subscriber/ResponseHandler.java b/src/main/java/com/corelibs/subscriber/ResponseHandler.java index 4fb6828..a94ed32 100644 --- a/src/main/java/com/corelibs/subscriber/ResponseHandler.java +++ b/src/main/java/com/corelibs/subscriber/ResponseHandler.java @@ -8,7 +8,8 @@ import java.net.SocketTimeoutException; import java.util.List; -import retrofit2.adapter.rxjava.HttpException; +import retrofit2.HttpException; + /** * 网络结果处理类, 此类会判断网络错误与业务错误. diff --git a/src/main/java/com/corelibs/subscriber/ResponseSubscriber.java b/src/main/java/com/corelibs/subscriber/ResponseSubscriber.java index 4aa2681..0a39879 100644 --- a/src/main/java/com/corelibs/subscriber/ResponseSubscriber.java +++ b/src/main/java/com/corelibs/subscriber/ResponseSubscriber.java @@ -3,9 +3,12 @@ import com.corelibs.base.BaseView; import com.corelibs.subscriber.ResponseHandler.IBaseData; +import org.reactivestreams.Subscriber; +import org.reactivestreams.Subscription; + import java.util.List; -import rx.Subscriber; + /** * 请使用此类来subscribe Retrofit返回Observable. @@ -17,8 +20,7 @@ * 此类会托管隐藏加载框与错误处理, 如果希望自行处理错误, 请覆写{@link #error(Throwable)}函数, * 并且返回true. */ -public abstract class ResponseSubscriber extends Subscriber - implements ResponseHandler.CustomHandler { +public abstract class ResponseSubscriber implements Subscriber, ResponseHandler.CustomHandler { private ResponseHandler handler; @@ -45,7 +47,12 @@ public boolean checkListNotNull(List data) { } @Override - public void onCompleted() { + public void onSubscribe(Subscription s) { + s.request(Long.MAX_VALUE); + } + + @Override + public void onComplete() { handler.onCompleted(); handler = null; } diff --git a/src/main/java/com/corelibs/subscriber/RxBusSubscriber.java b/src/main/java/com/corelibs/subscriber/RxBusSubscriber.java index 05bb604..d5ae510 100644 --- a/src/main/java/com/corelibs/subscriber/RxBusSubscriber.java +++ b/src/main/java/com/corelibs/subscriber/RxBusSubscriber.java @@ -1,13 +1,15 @@ package com.corelibs.subscriber; -import rx.Subscriber; +import io.reactivex.Observer; /** * 请使用此类来subscribe RxBus返回的Observable以简化onError与onCompleted函数. */ -public abstract class RxBusSubscriber extends Subscriber { +public abstract class RxBusSubscriber implements Observer { + + @Override - public void onCompleted() { + public void onComplete() { completed(); } diff --git a/src/main/java/com/corelibs/utils/rxbus/RxBus.java b/src/main/java/com/corelibs/utils/rxbus/RxBus.java index c460c77..d3096d0 100644 --- a/src/main/java/com/corelibs/utils/rxbus/RxBus.java +++ b/src/main/java/com/corelibs/utils/rxbus/RxBus.java @@ -1,10 +1,12 @@ package com.corelibs.utils.rxbus; -import rx.Observable; -import rx.functions.Func1; -import rx.subjects.PublishSubject; -import rx.subjects.SerializedSubject; -import rx.subjects.Subject; + +import io.reactivex.Observable; +import io.reactivex.annotations.NonNull; +import io.reactivex.functions.Function; +import io.reactivex.functions.Predicate; +import io.reactivex.subjects.PublishSubject; +import io.reactivex.subjects.Subject; /** * 基于事件RxJava的事件总线 @@ -17,7 +19,7 @@ public class RxBus { // If multiple threads are going to emit events to this // then it must be made thread-safe like this instead - private final Subject bus = new SerializedSubject<>(PublishSubject.create()); + private final Subject bus = PublishSubject.create().toSerialized(); /** 获取默认总线 **/ public static RxBus getDefault() { @@ -72,9 +74,10 @@ public Observable toObservable() { * @param eventType 事件类型, 只接收符合事件类型的事件 */ public Observable toObservable(final Class eventType) { - return bus.filter(new Func1() { + + return bus.filter(new Predicate() { @Override - public Boolean call(Object o) { + public boolean test(@NonNull Object o) throws Exception { return eventType.isInstance(o); } }).cast(eventType); @@ -86,21 +89,24 @@ public Boolean call(Object o) { * @param tag 事件类型, 只接收与事件类型相同的事件 */ public Observable toObservable(final Class eventType, final String tag) { - return bus.filter(new Func1() { + + return bus.filter(new Predicate() { @Override - public Boolean call(Object o) { + public boolean test(@NonNull Object o) throws Exception { if (!(o instanceof RxBusObject)) return false; RxBusObject ro = (RxBusObject) o; return eventType.isInstance(ro.getObj()) && tag != null && tag.equals(ro.getTag()); } - }).map(new Func1() { + }).map(new Function() { @Override - public T call(Object o) { + public T apply(@NonNull Object o) throws Exception { + RxBusObject ro = (RxBusObject) o; return (T) ro.getObj(); } }); + } /** diff --git a/src/main/java/com/corelibs/utils/uploader/ImageUploadHelper.java b/src/main/java/com/corelibs/utils/uploader/ImageUploadHelper.java index 0c27409..fe56ef7 100755 --- a/src/main/java/com/corelibs/utils/uploader/ImageUploadHelper.java +++ b/src/main/java/com/corelibs/utils/uploader/ImageUploadHelper.java @@ -16,8 +16,12 @@ import java.io.OutputStream; import java.util.Map; -import rx.Observable; -import rx.Subscriber; +import io.reactivex.BackpressureStrategy; +import io.reactivex.Flowable; +import io.reactivex.FlowableEmitter; +import io.reactivex.FlowableOnSubscribe; +import io.reactivex.annotations.NonNull; + /** * 通过{@link ImageUploader} 与 {@link ImageUploadRequest} 来上传图片. @@ -48,32 +52,32 @@ public void doPost(ImageUploadRequest request) { request.getFileKey(), request.getListener()); } - public Observable doPostWithObservable(final ImageUploadRequest request) { - return Observable.create(new Observable.OnSubscribe() { + public Flowable doPostWithObservable(final ImageUploadRequest request) { + return Flowable.create(new FlowableOnSubscribe() { @Override - public void call(final Subscriber subscriber) { + public void subscribe(@NonNull final FlowableEmitter subscriber) throws Exception { uploader.post(request.getUrl(), request.getParams(), request.getFiles(), request.getFileKey(), new ImageUploader.OnResponseListener() { - @Override @SuppressWarnings("unchecked") - public void onResponse(String data) { - if (request.getInnerClasses() == null || request.getInnerClasses().length <= 0) - subscriber.onNext((T) gson.fromJson(data, request.getOutputClass())); - else - subscriber.onNext((T) gson.fromJson(data, ParameterizedTypeImpl - .get(request.getOutputClass(), request.getInnerClasses()))); - - subscriber.onCompleted(); - } - - @Override - public void onError(Exception e) { - subscriber.onError(e); - } - }); + @Override + @SuppressWarnings("unchecked") + public void onResponse(String data) { + if (request.getInnerClasses() == null || request.getInnerClasses().length <= 0) + subscriber.onNext((T) gson.fromJson(data, request.getOutputClass())); + else + subscriber.onNext((T) gson.fromJson(data, ParameterizedTypeImpl + .get(request.getOutputClass(), request.getInnerClasses()))); + + subscriber.onComplete(); + } + + @Override + public void onError(Exception e) { + subscriber.onError(e); + } + }); } - }); + },BackpressureStrategy.DROP); } - public static File bitmapToFile(Context context, Bitmap bmp) throws IOException { return bitmapToFile(context, bmp, Bitmap.CompressFormat.JPEG); } @@ -172,4 +176,4 @@ public static void clearCache(final Context context) { }).start(); } -} +} \ No newline at end of file