MVP+Retrofit+Okhttp+RxJava

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);
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值