diff --git a/.gitignore b/.gitignore
index c6cbe56..72f62ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
.DS_Store
/build
/captures
+.idea
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index 96cc43e..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index e7bedf3..0000000
--- a/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 97626ba..0000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index 7ac24c7..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 1e4142f..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- C:\Users\WuXiaolong\AppData\Roaming\Subversion
-
-
-
-
-
- 1.8
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index 55468bd..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
deleted file mode 100644
index 7f68460..0000000
--- a/.idea/runConfigurations.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 94a25f7..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
index 796b96d..d0b97c6 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -1 +1,2 @@
/build
+*.iml
\ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
deleted file mode 100644
index 6c8a199..0000000
--- a/app/app.iml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugAndroidTestSources
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index a0053ff..0e2895b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,34 +1,44 @@
apply plugin: 'com.android.application'
+apply plugin: 'com.jakewharton.butterknife'
android {
- compileSdkVersion 25
- buildToolsVersion "25.0.3"
+ compileSdkVersion 27
+ buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.wuxiaolong.androidmvpsample"
minSdkVersion 14
- targetSdkVersion 22
- versionCode 20
- versionName "2.0"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
+ targetSdkVersion 27
+ versionCode 1
}
}
+ext {
+ androidutilsVersion = '1.0.5'
+ appcompatVersion = '27.1.0'
+ butterknifeVersion = '8.4.0'
+ retrofitVersion = '2.3.0'
+
+ logginginterceptor = '3.9.1'
+
+ rxjavaVersion = '2.1.11'
+ rxandroidVersion = "2.0.2"
+}
+
dependencies {
- compile fileTree(include: ['*.jar'], dir: 'libs')
- compile 'com.android.support:appcompat-v7:25.3.1'
- compile 'com.wuxiaolong.androidutils:androidutils:1.0.5'
- compile 'com.jakewharton:butterknife:7.0.1'
- compile 'com.squareup.retrofit2:retrofit:2.0.2'
- compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'
- compile 'com.squareup.retrofit2:converter-gson:2.0.2'
- compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
- compile 'io.reactivex:rxandroid:1.1.0'
- compile 'io.reactivex:rxjava:1.1.0'
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation "com.wuxiaolong.androidutils:androidutils:$androidutilsVersion"
+
+ implementation "com.android.support:appcompat-v7:$appcompatVersion"
+// //butterknife
+ //noinspection GradleDependency
+ implementation "com.jakewharton:butterknife:$butterknifeVersion"
+ annotationProcessor "com.jakewharton:butterknife-compiler:$butterknifeVersion"
+ implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
+ implementation "com.squareup.okhttp3:logging-interceptor:$logginginterceptor"
+ implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
+ implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
+ implementation "io.reactivex.rxjava2:rxandroid:$rxandroidVersion"
+ implementation "io.reactivex.rxjava2:rxjava:$rxjavaVersion"
}
diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/mvp/other/BasePresenter.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/mvp/other/BasePresenter.java
index 12d7e62..c2c4ccb 100644
--- a/app/src/main/java/com/wuxiaolong/androidmvpsample/mvp/other/BasePresenter.java
+++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/mvp/other/BasePresenter.java
@@ -3,11 +3,11 @@ package com.wuxiaolong.androidmvpsample.mvp.other;
import com.wuxiaolong.androidmvpsample.retrofit.ApiStores;
import com.wuxiaolong.androidmvpsample.retrofit.ApiClient;
-import rx.Observable;
-import rx.Subscriber;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-import rx.subscriptions.CompositeSubscription;
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
/**
@@ -19,7 +19,7 @@ import rx.subscriptions.CompositeSubscription;
public class BasePresenter {
public V mvpView;
protected ApiStores apiStores;
- private CompositeSubscription mCompositeSubscription;
+ private CompositeDisposable mCompositeDisposable;
public void attachView(V mvpView) {
this.mvpView = mvpView;
@@ -29,25 +29,27 @@ public class BasePresenter {
public void detachView() {
this.mvpView = null;
- onUnsubscribe();
+ onUnSubscribe();
}
- //RXjava取消注册,以避免内存泄露
- public void onUnsubscribe() {
- if (mCompositeSubscription != null && mCompositeSubscription.hasSubscriptions()) {
- mCompositeSubscription.unsubscribe();
+ //RxJava取消注册,以避免内存泄露
+ public void onUnSubscribe() {
+ if (mCompositeDisposable != null) {
+ mCompositeDisposable.dispose();
}
}
- public void addSubscription(Observable observable, Subscriber subscriber) {
- if (mCompositeSubscription == null) {
- mCompositeSubscription = new CompositeSubscription();
+ public void addSubscription(Observable observable, DisposableObserver observer) {
+ if (mCompositeDisposable == null) {
+ mCompositeDisposable = new CompositeDisposable();
}
- mCompositeSubscription.add(observable
- .subscribeOn(Schedulers.io())
+
+ mCompositeDisposable.add(observer);
+
+ observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(subscriber));
+ .subscribeWith(observer);
}
}
diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiCallback.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiCallback.java
index 646a0f0..862a4d0 100644
--- a/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiCallback.java
+++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiCallback.java
@@ -3,8 +3,10 @@ package com.wuxiaolong.androidmvpsample.retrofit;
import com.wuxiaolong.androidutils.library.LogUtil;
-import retrofit2.adapter.rxjava.HttpException;
-import rx.Subscriber;
+
+import io.reactivex.observers.DisposableObserver;
+import retrofit2.HttpException;
+
/**
* Created by WuXiaolong on 2016/9/22.
@@ -12,7 +14,7 @@ import rx.Subscriber;
* 微信公众号:吴小龙同学
* 个人博客:http://wuxiaolong.me/
*/
-public abstract class ApiCallback extends Subscriber {
+public abstract class ApiCallback extends DisposableObserver {
public abstract void onSuccess(M model);
@@ -50,7 +52,7 @@ public abstract class ApiCallback extends Subscriber {
}
@Override
- public void onCompleted() {
+ public void onComplete() {
onFinish();
}
}
diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiClient.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiClient.java
index 958c8da..0a0f7b3 100644
--- a/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiClient.java
+++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiClient.java
@@ -5,7 +5,7 @@ import com.wuxiaolong.androidmvpsample.BuildConfig;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
-import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
+import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
@@ -32,7 +32,7 @@ public class ApiClient {
mRetrofit = new Retrofit.Builder()
.baseUrl(ApiStores.API_SERVER_URL)
.addConverterFactory(GsonConverterFactory.create())
- .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
}
diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiStores.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiStores.java
index 670cfc4..2acd732 100644
--- a/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiStores.java
+++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/retrofit/ApiStores.java
@@ -2,10 +2,10 @@ package com.wuxiaolong.androidmvpsample.retrofit;
import com.wuxiaolong.androidmvpsample.mvp.main.MainModel;
+import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
-import rx.Observable;
/**
* Created by WuXiaolong on 2016/3/24.
diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseActivity.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseActivity.java
index c449c73..29887ad 100644
--- a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseActivity.java
+++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseActivity.java
@@ -21,13 +21,13 @@ import java.util.ArrayList;
import java.util.List;
import butterknife.ButterKnife;
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.observers.DisposableObserver;
+import io.reactivex.schedulers.Schedulers;
import retrofit2.Call;
-import rx.Observable;
-import rx.Subscriber;
-import rx.Subscription;
-import rx.android.schedulers.AndroidSchedulers;
-import rx.schedulers.Schedulers;
-import rx.subscriptions.CompositeSubscription;
/**
* Created by WuXiaolong on 2015/9/23.
@@ -35,9 +35,9 @@ import rx.subscriptions.CompositeSubscription;
* 微信公众号:吴小龙同学
* 个人博客:http://wuxiaolong.me/
*/
-public class BaseActivity extends AppCompatActivity {
+public abstract class BaseActivity extends AppCompatActivity {
public Activity mActivity;
- private CompositeSubscription mCompositeSubscription;
+ private CompositeDisposable mCompositeDisposable;
private List calls;
@Override
@@ -60,7 +60,6 @@ public class BaseActivity extends AppCompatActivity {
super.setContentView(view, params);
ButterKnife.bind(this);
mActivity = this;
-
}
@@ -93,36 +92,37 @@ public class BaseActivity extends AppCompatActivity {
}
- public void addSubscription(Observable observable, Subscriber subscriber) {
- if (mCompositeSubscription == null) {
- mCompositeSubscription = new CompositeSubscription();
+ public void addSubscription(Observable observable, DisposableObserver observer) {
+ if (mCompositeDisposable == null) {
+ mCompositeDisposable = new CompositeDisposable();
}
- mCompositeSubscription.add(observable
- .subscribeOn(Schedulers.io())
+ mCompositeDisposable.add(observer);
+
+ observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(subscriber));
+ .subscribe(observer);
}
- public void addSubscription(Subscription subscription) {
- if (mCompositeSubscription == null) {
- mCompositeSubscription = new CompositeSubscription();
+ public void addSubscription(Disposable disposable) {
+ if (mCompositeDisposable == null) {
+ mCompositeDisposable = new CompositeDisposable();
}
- mCompositeSubscription.add(subscription);
+ mCompositeDisposable.add(disposable);
}
public void onUnsubscribe() {
- LogUtil.d("onUnsubscribe");
+ LogUtil.d("onUnSubscribe");
//取消注册,以避免内存泄露
- if (mCompositeSubscription != null && mCompositeSubscription.hasSubscriptions())
- mCompositeSubscription.unsubscribe();
+ if (mCompositeDisposable != null)
+ mCompositeDisposable.dispose();
}
public Toolbar initToolBar(String title) {
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
+ Toolbar toolbar = findViewById(R.id.toolbar);
if (toolbar != null) {
setSupportActionBar(toolbar);
- TextView toolbaTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
+ TextView toolbaTitle = toolbar.findViewById(R.id.toolbar_title);
toolbaTitle.setText(title);
}
ActionBar actionBar = getSupportActionBar();
diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseFragment.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseFragment.java
index e6b4624..428d1c3 100644
--- a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseFragment.java
+++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/BaseFragment.java
@@ -11,9 +11,11 @@ import android.widget.Toast;
import com.wuxiaolong.androidmvpsample.R;
+import org.reactivestreams.Subscription;
+
import butterknife.ButterKnife;
-import rx.Subscription;
-import rx.subscriptions.CompositeSubscription;
+import io.reactivex.disposables.CompositeDisposable;
+import io.reactivex.observers.DisposableObserver;
/**
* Created by WuXiaolong on 2015/9/23.
@@ -55,19 +57,19 @@ public class BaseFragment extends Fragment {
onUnsubscribe();
}
- private CompositeSubscription mCompositeSubscription;
+ private CompositeDisposable mCompositeDisposable;
public void onUnsubscribe() {
//取消注册,以避免内存泄露
- if (mCompositeSubscription != null) {
- mCompositeSubscription.unsubscribe();
+ if (mCompositeDisposable != null) {
+ mCompositeDisposable.dispose();
}
}
- public void addSubscription(Subscription subscription) {
-// if (mCompositeSubscription == null) {
- mCompositeSubscription = new CompositeSubscription();
+ public void addSubscription(DisposableObserver observer) {
+// if (mCompositeDisposable == null) {
+ mCompositeDisposable = new CompositeDisposable();
// }
- mCompositeSubscription.add(subscription);
+ mCompositeDisposable.add(observer);
}
}
diff --git a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java
index dbaef35..ece998c 100644
--- a/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java
+++ b/app/src/main/java/com/wuxiaolong/androidmvpsample/ui/MainActivity.java
@@ -12,7 +12,7 @@ import com.wuxiaolong.androidmvpsample.mvp.other.MvpActivity;
import com.wuxiaolong.androidmvpsample.retrofit.ApiCallback;
import com.wuxiaolong.androidmvpsample.retrofit.RetrofitCallback;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import retrofit2.Call;
@@ -26,16 +26,14 @@ import retrofit2.Call;
*/
public class MainActivity extends MvpActivity implements MainView {
- @Bind(R.id.text)
+ @BindView(R.id.text)
TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- ButterKnife.bind(this);
initToolBarAsHome("MVP+Retrofit+Rxjava");
-
}
@Override
@@ -64,7 +62,7 @@ public class MainActivity extends MvpActivity implements MainView
loadDataByRetrofit();
break;
case R.id.button1:
- loadDataByRetrofitRxjava();
+ loadDataByRetrofitRxJava();
break;
case R.id.button2:
//请求接口
@@ -101,10 +99,12 @@ public class MainActivity extends MvpActivity implements MainView
}
//全国+国外主要城市代码http://mobile.weather.com.cn/js/citylist.xml
- private void loadDataByRetrofitRxjava() {
+ private void loadDataByRetrofitRxJava() {
showProgressDialog();
- addSubscription(apiStores().loadDataByRetrofitRxjava("101220602"),
+ addSubscription(
+ apiStores().loadDataByRetrofitRxjava("101220602"),
new ApiCallback() {
+
@Override
public void onSuccess(MainModel model) {
dataSuccess(model);
@@ -113,7 +113,6 @@ public class MainActivity extends MvpActivity implements MainView
@Override
public void onFailure(String msg) {
toastShow(msg);
-
}
@Override
diff --git a/build.gradle b/build.gradle
index 072e693..7e4372b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,9 +3,11 @@
buildscript {
repositories {
jcenter()
+ google()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.1'
+ classpath 'com.android.tools.build:gradle:3.0.1'
+ classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -15,5 +17,6 @@ buildscript {
allprojects {
repositories {
jcenter()
+ google()
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index f5eaf75..2e65a05 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/screenshots.png b/screenshots.png
deleted file mode 100644
index db5d55b..0000000
Binary files a/screenshots.png and /dev/null differ
diff --git a/screenshots.webp b/screenshots.webp
new file mode 100644
index 0000000..8094be6
Binary files /dev/null and b/screenshots.webp differ