MVP+Retrofit+Okhttp+RxJava

来源:互联网 发布:java初级工程师招聘 编辑:程序博客网 时间:2024/05/29 17:29

App的build.gradle依赖包:

         

    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包    compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包    compile 'com.facebook.fresco:fresco:0.11.0'    compile 'io.reactivex.rxjava2:rxjava:2.0.1'    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'    compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'

接口地址类:

public class API {    //接口:APIKEY=‘71e58b5b2f930eaf1f937407acde08fe’     http://api.tianapi.com/nba/?key=APIKEY&num=10    public static final String HOST="http://api.tianapi.com/nba/";    //接口:http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage    public static final String BASE_URL= "http://result.eolinker.com/";    public static final String TOKEN= "umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611";}


public interface ServiceAPI {        @GET(API.HOST)   //   Call<NewsBean>  getNews(@Query("key")String n,@Query("num") int i);        public Flowable<NewsBean> getNews(@Query("key")String n,@Query("num") int i);      //  @GET("{token}")     //   public Flowable<ShopResponse<HomeData>> homepage(@Path("token") String token, @Query("uri") String uri);}

对Retrofit的封装:

public class RetrofitHelper { private   static OkHttpClient client;  private   static ServiceAPI serviceAPI;    static {          getClient();    }    public static OkHttpClient getClient(){        if(client==null){            synchronized (OkHttpClient.class){                if(client==null){                    client=new OkHttpClient();                }            }        }        return client;    }    public static ServiceAPI getServiceAPI(){        if(serviceAPI==null){            synchronized (ServiceAPI.class){                if(serviceAPI==null){                     serviceAPI=onCreate(ServiceAPI.class,API.HOST);                }            }        }        return serviceAPI;    }    public static  <T> T onCreate(Class<T> tclass, String url){        Retrofit build = new Retrofit.Builder()                .baseUrl(url)                .addConverterFactory(GsonConverterFactory.create())                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                .client(client)                .build();       return build.create(tclass);    }}

封装Bean类省略

MVP

Model层:

public interface CGSB <T>{    void chengGong(T t);    void shiBai(Call<T> call);}


public interface NewsModelJK {   void getNews(String url, int i, CGSB<NewsBean> cgsb);}
public class NewsModel implements NewsModelJK {    public void getNews(String url, int i, final CGSB<NewsBean> cgsb){        Flowable<NewsBean> obserable = RetrofitHelper.getServiceAPI().getNews(url, i);//被观察者        obserable.subscribeOn(Schedulers.io())//被观察者       Scheduler (调度器)                  .observeOn(AndroidSchedulers.mainThread())       //观察者 切换到主线程                  .subscribe(new Consumer<NewsBean>() {                      @Override                      public void accept(NewsBean newsBean) throws Exception {                          //调用成功的方法                          cgsb.chengGong(newsBean);                      }                  });    }}

P层:

 

public interface INews {    void showBean(NewsBean newsBean);}

public class NewsPersenter {    private final NewsModel newsModel;    private INews iNews;    public NewsPersenter(INews iNews) {        newsModel = new NewsModel();        this.iNews=iNews;    }    public  void getNews(final String n, int i){        newsModel.getNews(n, i, new CGSB<NewsBean>() {            @Override            public void chengGong(NewsBean newsBean) {                iNews.showBean(newsBean);            }            @Override            public void shiBai(Call<NewsBean> call) {            }        });    }}

public class MainActivity extends AppCompatActivity implements INews {    private XRecyclerView mXrlv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        NewsPersenter newsPersenter = new NewsPersenter(this);        newsPersenter.getNews("71e58b5b2f930eaf1f937407acde08fe", 10);        /**         * 沉浸式         */        initState();    }    @Override    public void showBean(NewsBean newsBean) {   //     Log.i("Tag", newsBean.getMsg());        List<NewsBean.NewslistBean> newslist = newsBean.getNewslist();        mXrlv.setLayoutManager(new LinearLayoutManager(this));        MyAdapter myAdapter = new MyAdapter(newslist, this);        mXrlv.setAdapter(myAdapter);    }    private void initView() {        mXrlv = (XRecyclerView) findViewById(R.id.xrlv);    }    /**     * 沉浸式状态栏     */    private void initState() {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            //透明状态栏            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            //透明导航栏            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);        }    }}



原创粉丝点击