├── .gitignore ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml └── runConfigurations.xml ├── .ignore ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── wingsofts │ │ └── rxretrofitmvpdagger2databinding │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── wingsofts │ │ │ └── rxretrofitmvpdagger2databinding │ │ │ ├── Constant.java │ │ │ ├── api │ │ │ └── DataApi.java │ │ │ ├── bean │ │ │ └── ApiBean.java │ │ │ ├── contract │ │ │ └── MainContract.java │ │ │ ├── di │ │ │ ├── component │ │ │ │ └── MainComponent.java │ │ │ └── module │ │ │ │ └── MainModule.java │ │ │ ├── model │ │ │ └── MainModelImpl.java │ │ │ ├── presenter │ │ │ └── MainPresenterImpl.java │ │ │ └── view │ │ │ └── activity │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── wingsofts │ └── rxretrofitmvpdagger2databinding │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | RxRetrofitMVPDagger2DataBinding -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 24 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 46 | 47 | $USER_HOME$/.subversion 48 | 50 | 51 | 52 | 53 | 54 | 1.8 55 | 56 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 72 | 73 | 74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.ignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | 15 | # Gradle files 16 | .gradle/ 17 | build/ 18 | /*/build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | 28 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | apply plugin: 'com.neenbedankt.android-apt' 4 | android { 5 | compileSdkVersion 24 6 | buildToolsVersion "24.0.0" 7 | 8 | defaultConfig { 9 | applicationId "com.wingsofts.rxretrofitmvpdagger2databinding" 10 | minSdkVersion 15 11 | targetSdkVersion 24 12 | versionCode 1 13 | versionName "1.0" 14 | } 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | dataBinding { 22 | enabled = true 23 | } 24 | } 25 | 26 | 27 | dependencies { 28 | compile fileTree(dir: 'libs', include: ['*.jar']) 29 | testCompile 'junit:junit:4.12' 30 | compile 'com.android.support:appcompat-v7:24.0.0' 31 | 32 | //Rxjava 33 | compile "io.reactivex:rxandroid:$rxAndroidLibVersion" 34 | compile "io.reactivex:rxjava:$rxjavaLibVersion" 35 | //DataBinding 36 | compile "com.jakewharton.rxbinding:rxbinding:$rxBindingLibVersion" 37 | compile "com.jakewharton.rxbinding:rxbinding-design:$rxBindingLibVersion" 38 | 39 | //retrofit 40 | compile "com.squareup.retrofit2:retrofit:$retrofitLibVersion" 41 | compile "com.squareup.retrofit2:converter-gson:$retrofitLibVersion" 42 | compile "com.squareup.retrofit2:adapter-rxjava:$retrofitLibVersion" 43 | compile "com.squareup.okhttp3:okhttp:$okhttpLibVersion" 44 | compile "com.squareup.okhttp3:logging-interceptor:$okhttpLibVersion" 45 | compile 'com.google.code.gson:gson:2.4' 46 | // Dagger2 47 | compile "com.google.dagger:dagger:${daggerLibVersion}" 48 | apt "com.google.dagger:dagger-compiler:${daggerLibVersion}" 49 | provided 'org.glassfish:javax.annotation:10.0-b28' 50 | } 51 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/wing/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/wingsofts/rxretrofitmvpdagger2databinding/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/Constant.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding; 2 | 3 | /** 4 | * Created by wing on 16/7/21. 5 | */ 6 | public class Constant { 7 | public static String HOST = "http://wifikey.org/api/"; 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/api/DataApi.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.api; 2 | 3 | import com.wingsofts.rxretrofitmvpdagger2databinding.bean.ApiBean; 4 | 5 | import rx.Observable; 6 | 7 | import retrofit2.http.GET; 8 | 9 | /** 10 | * Created by wing on 16/7/21. 11 | */ 12 | public interface DataApi { 13 | @GET("api.php")Observable getData(); 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/bean/ApiBean.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.bean; 2 | 3 | /** 4 | * Created by wing on 16/7/21. 5 | */ 6 | public class ApiBean { 7 | 8 | /** 9 | * errNum : 0 10 | * retMsg : success 11 | * retData : {"phone":"15210011578","prefix":"1521001","supplier":"移动 ","province":"北京 ","city":"北京 ","suit":"152卡"} 12 | */ 13 | 14 | private int errNum; 15 | private String retMsg; 16 | /** 17 | * phone : 15210011578 18 | * prefix : 1521001 19 | * supplier : 移动 20 | * province : 北京 21 | * city : 北京 22 | * suit : 152卡 23 | */ 24 | 25 | private RetDataBean retData; 26 | 27 | public int getErrNum() { 28 | return errNum; 29 | } 30 | 31 | public void setErrNum(int errNum) { 32 | this.errNum = errNum; 33 | } 34 | 35 | public String getRetMsg() { 36 | return retMsg; 37 | } 38 | 39 | public void setRetMsg(String retMsg) { 40 | this.retMsg = retMsg; 41 | } 42 | 43 | public RetDataBean getRetData() { 44 | return retData; 45 | } 46 | 47 | public void setRetData(RetDataBean retData) { 48 | this.retData = retData; 49 | } 50 | 51 | public static class RetDataBean { 52 | private String phone; 53 | private String prefix; 54 | private String supplier; 55 | private String province; 56 | private String city; 57 | private String suit; 58 | 59 | public String getPhone() { 60 | return phone; 61 | } 62 | 63 | public void setPhone(String phone) { 64 | this.phone = phone; 65 | } 66 | 67 | public String getPrefix() { 68 | return prefix; 69 | } 70 | 71 | public void setPrefix(String prefix) { 72 | this.prefix = prefix; 73 | } 74 | 75 | public String getSupplier() { 76 | return supplier; 77 | } 78 | 79 | public void setSupplier(String supplier) { 80 | this.supplier = supplier; 81 | } 82 | 83 | public String getProvince() { 84 | return province; 85 | } 86 | 87 | public void setProvince(String province) { 88 | this.province = province; 89 | } 90 | 91 | public String getCity() { 92 | return city; 93 | } 94 | 95 | public void setCity(String city) { 96 | this.city = city; 97 | } 98 | 99 | public String getSuit() { 100 | return suit; 101 | } 102 | 103 | public void setSuit(String suit) { 104 | this.suit = suit; 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/contract/MainContract.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.contract; 2 | 3 | import com.wingsofts.rxretrofitmvpdagger2databinding.bean.ApiBean; 4 | 5 | import rx.Observable; 6 | 7 | /** 8 | * Created by wing on 16/7/21. 9 | */ 10 | public interface MainContract { 11 | interface MainView{ 12 | void showData(ApiBean.RetDataBean retDataBean); 13 | void showProgressBar(); 14 | } 15 | 16 | 17 | 18 | interface MainPresenter{ 19 | void getMainData(); 20 | } 21 | 22 | interface MainModel{ 23 | Observable loadMainData(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/di/component/MainComponent.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.di.component; 2 | 3 | import com.wingsofts.rxretrofitmvpdagger2databinding.di.module.MainModule; 4 | import com.wingsofts.rxretrofitmvpdagger2databinding.presenter.MainPresenterImpl; 5 | 6 | import dagger.Component; 7 | 8 | /** 9 | * Created by wing on 16/7/21. 10 | */ 11 | @Component(modules = MainModule.class) 12 | public interface MainComponent { 13 | MainPresenterImpl getPresenter(); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/di/module/MainModule.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.di.module; 2 | 3 | import com.wingsofts.rxretrofitmvpdagger2databinding.contract.MainContract; 4 | import com.wingsofts.rxretrofitmvpdagger2databinding.view.activity.MainActivity; 5 | 6 | import dagger.Module; 7 | import dagger.Provides; 8 | 9 | /** 10 | * Created by wing on 16/7/21. 11 | */ 12 | @Module 13 | public class MainModule { 14 | private MainContract.MainView mMainView; 15 | 16 | public MainModule(MainContract.MainView mMainView) { 17 | this.mMainView = mMainView; 18 | } 19 | @Provides 20 | public MainContract.MainView inject(){ 21 | return mMainView; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/model/MainModelImpl.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.model; 2 | 3 | import android.view.View; 4 | 5 | import com.wingsofts.rxretrofitmvpdagger2databinding.Constant; 6 | import com.wingsofts.rxretrofitmvpdagger2databinding.api.DataApi; 7 | import com.wingsofts.rxretrofitmvpdagger2databinding.bean.ApiBean; 8 | import com.wingsofts.rxretrofitmvpdagger2databinding.contract.MainContract; 9 | 10 | 11 | import retrofit2.Retrofit; 12 | import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; 13 | import retrofit2.converter.gson.GsonConverterFactory; 14 | import rx.Observable; 15 | import rx.Scheduler; 16 | import rx.android.schedulers.AndroidSchedulers; 17 | import rx.functions.Action1; 18 | import rx.functions.Func1; 19 | import rx.schedulers.Schedulers; 20 | 21 | /** 22 | * Created by wing on 16/7/21. 23 | */ 24 | public class MainModelImpl implements MainContract.MainModel { 25 | 26 | private DataApi mApi; 27 | 28 | public MainModelImpl() { 29 | //创建Retrofit的 Observable 30 | mApi = new Retrofit.Builder().baseUrl(Constant.HOST).addConverterFactory(GsonConverterFactory.create()) 31 | .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 32 | .build().create(DataApi.class); 33 | } 34 | 35 | @Override 36 | public Observable loadMainData() { 37 | return mApi.getData(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/presenter/MainPresenterImpl.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.presenter; 2 | 3 | import android.util.Log; 4 | 5 | import com.wingsofts.rxretrofitmvpdagger2databinding.bean.ApiBean; 6 | import com.wingsofts.rxretrofitmvpdagger2databinding.contract.MainContract; 7 | import com.wingsofts.rxretrofitmvpdagger2databinding.model.MainModelImpl; 8 | 9 | import javax.inject.Inject; 10 | import javax.security.auth.login.LoginException; 11 | 12 | import rx.Subscriber; 13 | import rx.android.schedulers.AndroidSchedulers; 14 | import rx.functions.Action1; 15 | import rx.schedulers.Schedulers; 16 | 17 | /** 18 | * Created by wing on 16/7/21. 19 | */ 20 | public class MainPresenterImpl implements MainContract.MainPresenter { 21 | private MainContract.MainView mMainView; 22 | private MainContract.MainModel mMainModel; 23 | 24 | @Inject 25 | public MainPresenterImpl(MainContract.MainView mainView) { 26 | mMainView = mainView; 27 | mMainModel = new MainModelImpl(); 28 | } 29 | 30 | @Override 31 | public void getMainData() { 32 | mMainModel.loadMainData() 33 | .observeOn(AndroidSchedulers.mainThread()) 34 | .subscribeOn(Schedulers.io()) 35 | .subscribe(new Subscriber() { 36 | @Override 37 | public void onCompleted() { 38 | 39 | } 40 | 41 | @Override 42 | public void onError(Throwable e) { 43 | 44 | } 45 | 46 | @Override 47 | public void onNext(ApiBean apiBean) { 48 | mMainView.showData(apiBean.getRetData()); 49 | Log.e("wing","onNext"); 50 | } 51 | 52 | 53 | }); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/wingsofts/rxretrofitmvpdagger2databinding/view/activity/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.wingsofts.rxretrofitmvpdagger2databinding.view.activity; 2 | 3 | import android.app.ProgressDialog; 4 | import android.databinding.DataBindingUtil; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | import android.view.View; 8 | 9 | import com.wingsofts.rxretrofitmvpdagger2databinding.R; 10 | import com.wingsofts.rxretrofitmvpdagger2databinding.bean.ApiBean; 11 | import com.wingsofts.rxretrofitmvpdagger2databinding.contract.MainContract; 12 | import com.wingsofts.rxretrofitmvpdagger2databinding.databinding.ActivityMainBinding; 13 | import com.wingsofts.rxretrofitmvpdagger2databinding.di.component.DaggerMainComponent; 14 | import com.wingsofts.rxretrofitmvpdagger2databinding.di.module.MainModule; 15 | 16 | import javax.inject.Inject; 17 | 18 | public class MainActivity extends AppCompatActivity implements MainContract.MainView { 19 | private ActivityMainBinding mBinding; 20 | MainContract.MainPresenter mPresenter; 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | mBinding = DataBindingUtil.setContentView(this,R.layout.activity_main); 25 | mPresenter = DaggerMainComponent.builder().mainModule(new MainModule(this)).build().getPresenter(); 26 | } 27 | 28 | public void getData(View view) { 29 | //使用presenter操作M与V的交互 30 | mPresenter.getMainData(); 31 | } 32 | 33 | @Override 34 | public void showData(ApiBean.RetDataBean retDataBean) { 35 | mBinding.setPhone(retDataBean); 36 | } 37 | 38 | @Override 39 | public void showProgressBar() { 40 | new ProgressDialog.Builder(this).setMessage("loading").create().show(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 12 | 13 | 14 | 17 | 18 | 22 | 23 | 28 | 29 | 33 | 34 | 38 | 39 | 43 | 44 | 45 | 46 |