MVP封装成基类结合retrofit和Rxjava
2017-12-06 12:16
423 查看
导入依赖
[b]清单文件中加入权限[/b]
先写公共基类BasePresenter<V>
写一个公共的BaseMvpActivity<V,T extends BasePresenter<V>> extends AppcompatActivity
view层的接口LoginView,model层的接口LoginModelCallBack
具体的presenter类LoginPresenter继承BasePresenter<LoginView>
具体的model层LoginModelImpl
具体的view层MainActivity
retrofit访问网络的接口类IInterface
IApplication类中初始化retrofit
compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.7' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-scalars:2.0.0' compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'
[b]清单文件中加入权限[/b]
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <application android:name=".utlis.IApplication"
先写公共基类BasePresenter<V>
package com.example.snmsung.retrofitmvp.utlis; public class BasePresenter<V> { public V view;//相当于View层的接口 /** *presenter绑定,持有view 的接口 * */ public void attach(V v){ this.view = v; } /** * presenter释放持有view层的接口,防止内存泄漏 * */ public void detach(){ this.view = null; } }
写一个公共的BaseMvpActivity<V,T extends BasePresenter<V>> extends AppcompatActivity
package com.example.snmsung.retrofitmvp.activity; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import com.example.snmsung.retrofitmvp.R; import com.example.snmsung.retrofitmvp.utlis.BasePresenter; public abstract class BaseMvpActivity<V,T extends BasePresenter<V>> extends AppCompatActivity { public T presenter;//presenter public abstract T initPresenter();//返回值是T 代表presenter层的类型 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base_mvp); presenter = initPresenter(); } @Override protected void onResume() { super.onResume(); //绑定,p和v层 presenter.attach((V) this); } @Override protected void onDestroy() { super.onDestroy(); //解除p层和v层的绑定 presenter.detach(); } }
view层的接口LoginView,model层的接口LoginModelCallBack
package com.example.snmsung.retrofitmvp.view; import com.example.snmsung.retrofitmvp.Bean.Bean; /** * Created by SNMSUNG on 2017/12/6. */ public interface LoginView { public void success(Bean bean); public void failure(); }
package com.example.snmsung.retrofitmvp.moder; import com.example.snmsung.retrofitmvp.Bean.Bean; /** * Created by SNMSUNG on 2017/12/6. */ public interface LoginModelCallBack { public void success(Bean bean); }
具体的presenter类LoginPresenter继承BasePresenter<LoginView>
package com.example.snmsung.retrofitmvp.presenter; import com.example.snmsung.retrofitmvp.Bean.Bean; import com.example.snmsung.retrofitmvp.moder.LoginModelCallBack; import com.example.snmsung.retrofitmvp.moder.LoginModelImpl; import com.example.snmsung.retrofitmvp.utlis.BasePresenter; import com.example.snmsung.retrofitmvp.view.LoginView; /** * Created by SNMSUNG on 2017/12/6. */ public class LoginPresenter extends BasePresenter<LoginView> { LoginModelImpl loginModel; public LoginPresenter(){ this.loginModel = new LoginModelImpl(); } //presenter里面的方法 public void login(){ loginModel.getData(new LoginModelCallBack() { @Override public void success(Bean bean) { //view就是此时的view层接口 view.success(bean); } }); } }
具体的model层LoginModelImpl
package com.example.snmsung.retrofitmvp.moder; import com.example.snmsung.retrofitmvp.Bean.Bean; import com.example.snmsung.retrofitmvp.utlis.IApplication; import java.util.HashMap; import java.util.Map; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.functions.Consumer; import io.reactivex.schedulers.Schedulers; /** * Created by SNMSUNG on 2017/12/6. */ public class LoginModelImpl { public void getData(final LoginModelCallBack modelCallBack) { Map<String, String> map = new HashMap<>(); map.put("key", "71e58b5b2f930eaf1f937407acde08fe"); map.put("num", "10"); //调用application中初始化过的方法 Observable<Bean> observable = IApplication.iInterface.get(map); observable.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Bean>() { @Override public void accept(Bean bean) throws Exception{ //拿到了请求回来的数据 //回调出去 modelCallBack.success(bean); } }); } }
具体的view层MainActivity
package com.example.snmsung.retrofitmvp.activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import com.example.snmsung.retrofitmvp.Bean.Bean; import com.example.snmsung.retrofitmvp.R; import com.example.snmsung.retrofitmvp.presenter.LoginPresenter; import com.example.snmsung.retrofitmvp.view.LoginView; public class MainActivity extends BaseMvpActivity<LoginView,LoginPresenter> implements LoginView { //继承抽象类BaseMvpActivity ,必须重写的方法initPresenter @Override public LoginPresenter initPresenter() { return new LoginPresenter(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = findViewById(R.id.but); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //此时的presenter就是loginpresenter presenter.login();//调用p层的方法 } }); } //实现view层接口 重写的方法 @Override public void success(Bean bean) { System.out.println("ok" + bean.toString()); } @Override public void failure() { } }
retrofit访问网络的接口类IInterface
package com.example.snmsung.retrofitmvp.utlis; import com.example.snmsung.retrofitmvp.Bean.Bean; import java.util.Map; import io.reactivex.Observable; import retrofit2.http.FieldMap; import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.QueryMap; /** * Created by SNMSUNG on 2017/12/6. */ public interface IInterface { @GET("/nba") Observable<Bean> get(@QueryMap Map<String,String> map); @POST("/nba") Observable<Bean> post(@FieldMap Map<String,String> map); }
IApplication类中初始化retrofit
package com.example.snmsung.retrofitmvp.utlis; import android.app.Application; import retrofit2.Retrofit; import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by SNMSUNG on 2017/12/5. */ public class IApplication extends Application { public static IInterface iInterface; @Override public void onCreate() { super.onCreate(); //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://api.tianapi.com") .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); iInterface = retrofit.create(IInterface.class); } }
相关文章推荐
- MVP封装成基类结合retrofit和Rxjava
- MVP基类,Retrofit,OkHttp拦截器,RxJava封装
- MVP和Retrofit+Rxjava+OkHttp封装结合请求数据
- 安卓项目快速开发框架, MVP + Retrofit + RxJava,Activity 和 Fragment 结合 MVP 模式的完整封装,大大减少代码量
- 仅仅有几个基类, 仅仅用Dagger注入几个工具类就敢叫MVP+Dagger+Retrofit+Rxjava框架?
- 一步一步带你认识MVP+Retrofit+Rxjava并封装(二)
- MVP模式入门(结合Rxjava,Retrofit)
- Retrofit+Rxjava结合使用封装
- 一步一步带你认识MVP+Retrofit+Rxjava并封装(一)
- RetrofitAndRxJavaAndMVP二次封装
- Android MVP+RxJava+Retrofit 入门封装
- 安卓开发框架(MVP+主流框架+基类+工具类)--- Retrofit+RxJava
- Android MVP+Retrofit(封装)+RxJava实例
- RxJava结合Retrofit使用 自定义封装类结合泛型 请求网络数据+Fresco+RecyclerView+MVP分层
- mvp基类+retrofit封装 请求数据
- RxAndroid+Retrofit+GreenDao+MVP框架---通用基类封装(一)
- RxJava+Retrofit+MVP 封装带有加载框的Http请求
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- Android——MVP+xRecyclerView+Retrofit+OkHttp+RxJava结合应用
- RxAndroid+Retrofit+GreenDao+MVP框架---通用基类封装(二)