MVP封装成基类结合retrofit和Rxjava
来源:互联网 发布:辐射4低配优化补丁 编辑:程序博客网 时间:2024/05/16 04:45
导入依赖
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'
清单文件中加入权限
<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); }}
阅读全文
0 0
- MVP封装成基类结合retrofit和Rxjava
- MVP封装成基类结合retrofit和Rxjava
- MVP和Retrofit+Rxjava+OkHttp封装结合请求数据
- MVp封装RxJava+Retrofit
- retrofit-rxjava封装、mvp-retrofit-rxjava demo
- Android Retrofit+RxJava+MVP封装
- Mvp+Retrofit+Rxjava+RxLifecycle的封装和使用
- rxjava和retrofit结合
- RxJava和Retrofit结合
- MVP+Retrofit+RxJava(Flowable)结合使用
- 安卓项目快速开发框架, MVP + Retrofit + RxJava,Activity 和 Fragment 结合 MVP 模式的完整封装,大大减少代码量
- RxJava+okhttp+Retrofit+Mvp 的封装
- RXJava+Retrofit+MVP的简单封装
- 终极封装 Rxjava+Retrofit+okhttp+mvp实现
- Android MVP+Retrofit(封装)+RxJava实例
- MVP+Retrofit+Rxjava项目的封装
- Retrofit 和 RxJava 结合使用
- Retrofit和RxJava结合使用
- 2017年12月银行卡跨行ATM取现手续费
- JAVA第一步工作 classpath、path、JAVA_HOME的作用及JAVA环境变量配置等
- IEnumerator和IEnumerable的区别
- R语言在ubuntu下的编译安装
- ubuntu安装nvidia, cuda和cudnn
- MVP封装成基类结合retrofit和Rxjava
- Django的 session与cookie
- java中代码 &0xFF是怎么个意思
- 小朋友学C语言(34):main函数的参数
- Windows API入门系列之五 -一个正儿八经的SDK程序
- 控制loading
- cordova 安装及使用
- Faster-RCNN检测-RPN
- 1041. 考试座位号(15) PAT乙级真题