MVP+rxJava+retrofit+拦截器

Model层

public interface Imodel {
    void RequestSuccess(String url);
}
 
public class Model implements Imodel {

    private List<News.SongListBean> list = new ArrayList<>();
    OnFinish onFinish;

    public interface OnFinish{
        void OnFinshListener(List<News.SongListBean> list);
    }

    public void setOnFinish(OnFinish onFinish){
        this.onFinish = onFinish;
    }

    @Override
    public void RequestSuccess(String url) {
        OkHttpClient client = new OkHttpClient
         .Builder()
         .addInterceptor(new LoggingInterceptor())
         .build();

        Retrofit retrofit = new Retrofit
         .Builder()
         .baseUrl(API.BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        ApiService apiService = retrofit.create(ApiService.class);
        final Observable<News> bean = apiService.getSong_list();
        bean.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<News>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(News news) {
                        List<News.SongListBean> bean = news.getSong_list();
                        onFinish.OnFinshListener(bean);
                    }
                });
    }
}

 View层

public interface Iview {
    void showSuccess(List<News.SongListBean> list);
    void showError(String r);
}
 
Presenter层

public class Presenter implements Model.OnFinish {
    Iview iview;
    Model model;

    public Presenter(Iview iview) {
        this.iview = iview;
        this.model = new Model();
        model.setOnFinish(this);
    }

    public void getUrl(String url){
        model.RequestSuccess(url);
    }

    @Override
    public void OnFinshListener(List<News.SongListBean> list) {
        iview.showSuccess(list);
    }
}
  
  API
public class API {
    public   static final String  BASE_URL="http://tingapi.ting.baidu.com/v1/restserver/";
}
public interface ApiService {
    @GET("ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0")
    Observable<News> getSong_list();
}



在MainActivity中继承View层,两个方法
在onCreate方法中实例化Presenter方法
@Override
public void showSuccess(List<News.SongListBean> list) {
    manager = new LinearLayoutManager(this);  //显示方式
    recyclerView.setLayoutManager(manager);   //与recyclerview绑定
    myAdapter = new MyAdapter(list,MainActivity.this);   //适配器
    recyclerView.setAdapter(myAdapter);
}

@Override
public void showError(String r) {

}

拦截器
public class LoggingInterceptor implements Interceptor {
    private static final String UA = "User-Agent";

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request()
                .newBuilder()
                .addHeader(UA, makeUA())
                .build();
        return chain.proceed(request);
    }

    private String makeUA() {
        String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
        return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
    }

}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值