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(); } } }
view接口:
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() { } }); } }
p层接口:
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; } }