版权声明:本文为博主原创文章,未经博主允许不得转载。
Model 模型 view 视图 presenter层 (桥梁)
每一层都有一个接口来下面直接上代码:
=========================================================================
view 层
MainActivity :
- import android.os.Bundle;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.LinearLayoutManager;
- import android.support.v7.widget.RecyclerView;
- import com.facebook.drawee.backends.pipeline.Fresco;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import bwie.com.day_rikao_1207.adparer.RecyclerAA;
- import bwie.com.day_rikao_1207.bean.Newslist;
- import bwie.com.day_rikao_1207.presenter.DataPresenter;
- import bwie.com.day_rikao_1207.view.IView;
- import static android.widget.LinearLayout.VERTICAL;
- public class MainActivity extends AppCompatActivity implements IView{
- private RecyclerView recy;
- private DataPresenter dataPresenter;
- private List<Newslist> list=new ArrayList<>();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- Fresco.initialize(this);
- setContentView(R.layout.activity_main);
- recy = (RecyclerView) findViewById(R.id.recy);
- HashMap<String,String> map = new HashMap<>();
- //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10
- map.put("key","71e58b5b2f930eaf1f937407acde08fe");
- map.put("num","10");
- dataPresenter = new DataPresenter();
- dataPresenter.acceachView(this);
- dataPresenter.getData(map);
- }
- @Override
- public void success(Object o) {
- if (o instanceof List){
- List<Newslist> news= (List<Newslist>) o;
- list.addAll(news);
- RecyclerAA recyclerAA = new RecyclerAA(this,list);
- recy.setAdapter(recyclerAA);
- LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,VERTICAL,false );
- recy.setLayoutManager(linearLayoutManager);
- recyclerAA.notifyDataSetChanged();
- }
- }
- @Override
- public void Failes(Exception e) {
- }
- //避免内存泄漏
- @Override
- protected void onDestroy() {
- super.onDestroy();
- if (dataPresenter!=null){
- dataPresenter.detechView();
- }
- }
- }
- public interface IView {
- void success(Object o);
- void Failes(Exception e);
- }
Presenter 层:
- import java.util.List;
- import java.util.Map;
- import bwie.com.day_rikao_1207.bean.JsonRootBean;
- import bwie.com.day_rikao_1207.bean.Newslist;
- import bwie.com.day_rikao_1207.model.DataModel;
- import bwie.com.day_rikao_1207.model.IModel;
- import bwie.com.day_rikao_1207.view.IView;
- import io.reactivex.Flowable;
- import io.reactivex.android.schedulers.AndroidSchedulers;
- import io.reactivex.schedulers.Schedulers;
- import io.reactivex.subscribers.DisposableSubscriber;
- /**
- * Created by 迷人的脚毛!! on 2017/12/7.
- */
- public class DataPresenter implements BasePresenter{
- private IView iv;
- private DisposableSubscriber<JsonRootBean<List<Newslist>>> subscriber;
- public void acceachView(IView iv){
- this.iv=iv;
- }
- public void detechView(){
- if (iv!=null){
- iv=null;
- }
- if (subscriber!=null){
- if (!subscriber.isDisposed()){
- subscriber.dispose();
- }
- }
- }
- @Override
- public void getData(Map<String, String> map) {
- IModel model= new DataModel(this);
- model.getData(map);
- }
- public void getDatas(Flowable<JsonRootBean<List<Newslist>>> flowable){
- subscriber = flowable.subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribeWith(new DisposableSubscriber<JsonRootBean<List<Newslist>>>() {
- //普通事件
- @Override
- public void onNext(JsonRootBean<List<Newslist>> listJsonRootBean) {
- if (listJsonRootBean != null) {
- List<Newslist> newslist = listJsonRootBean.getNewslist();
- if (newslist != null) {
- iv.success(newslist);
- }
- }
- }
- //异常事件
- @Override
- public void onError(Throwable t) {
- iv.Failes(new Exception(t));
- }
- @Override
- public void onComplete() {
- }
- });
- }
- }
- public interface BasePresenter{
- void getData(Map<String,String> map);
- }
model层:
- import io.reactivex.Flowable;
- /**
- * Created by 迷人的脚毛!! on 2017/12/7.
- */
- public class DataModel implements IModel{
- private DataPresenter presenter;
- public DataModel(DataPresenter presenter) {
- this.presenter = presenter;
- }
- @Override
- public void getData(Map<String, String> map) {
- Flowable<JsonRootBean<List<Newslist>>> flowable = RetrofitUtil.getInstant().getApiService().getData(map);
- presenter.getDatas(flowable);
- }
- }
IModel 接口:
- public interface IModel {
- void getData(Map<String,String> map);
- }
- public interface ApiService {
- //http://api.tianapi.com/nba/?key=71e58b5b2f930eaf1f937407acde08fe&num=10
- @GET("nba/")
- Flowable<JsonRootBean<List<Newslist>>> getData(@QueryMap Map<String,String> map);
- }
RetrofitUtil 工具类:
- import retrofit2.Retrofit;
- import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
- import retrofit2.converter.gson.GsonConverterFactory;
- public class RetrofitUtil {
- private static volatile RetrofitUtil instant;
- private ApiService apiService;
- private RetrofitUtil() {
- Retrofit retrofit = new Retrofit.Builder()
- .addConverterFactory(GsonConverterFactory.create())
- .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
- .baseUrl("http://api.tianapi.com/")
- .build();
- apiService = retrofit.create(ApiService.class);
- }
- public static RetrofitUtil getInstant(){
- if (null==instant){
- synchronized (RetrofitUtil.class){
- if (instant==null){
- instant=new RetrofitUtil();
- }
- }
- }
- return instant;
- }
- public ApiService getApiService(){
- return apiService;
- }
- }