RxJava+MVP+Retrofit

    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxjava:2.0.2'
    implementation 'com.squareup.retrofit2:retrofit:2.0.2'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    implementation 'com.android.support:design:27.+'
    implementation 'com.facebook.fresco:fresco:0.12.0'
    //其他依赖
    // 在 API < 14 上的机器支持 WebP 时,需要添加
    implementation 'com.facebook.fresco:animated-base-support:0.12.0'
    // 支持 GIF 动图,需要添加
    implementation 'com.facebook.fresco:animated-gif:0.12.0'
    // 支持 WebP (静态图+动图),需要添加
    implementation 'com.facebook.fresco:animated-webp:0.12.0'
    implementation 'com.facebook.fresco:webpsupport:0.12.0'
    // 仅支持 WebP 静态图,需要添加
//implementation 'com.facebook.fresco:webpsupport:0.12.0'
    implementation 'com.android.support:support-v4:27.0.0'

       

拦截器 

public class LogInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        String method = request.method();
        HttpUrl url = request.url();
        Log.i("LogInterceptor",method+"...."+url);
        Response proceed = chain.proceed(request);
        return proceed;
    }
}

  网络工具类

   

public class RetrofitUtil {

    private static RetrofitUtil retrofitUtil;
    private Retrofit retrofit;
    private OkHttpClient client;

    private RetrofitUtil(){
        client = new OkHttpClient.Builder()
                .addInterceptor(new LogInterceptor())
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
                .readTimeout(5000,TimeUnit.MILLISECONDS)
                .build();
    }

    public static RetrofitUtil getInstance(){
        if(null == retrofitUtil){
            synchronized (RetrofitUtil.class){
                if(null == retrofitUtil){
                    return new RetrofitUtil();
                }
            }
        }
        return retrofitUtil;
    }

    public ApiService getapiService(String baseurl){
        retrofit = new Retrofit.Builder()
                .client(client)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(baseurl)
                .build();
        ApiService apiService = retrofit.create(ApiService.class);
        return apiService;
    }
}

ApiService

public interface ApiService {

    @GET("ad/getAd")
    Observable<HomeBean> getService(@Query("page")String page);
}

Contast

public class Contast {

    //存放完整的接口
    public static final String URL_STRING = "http://120.27.23.105/ad/getAd";
    //存放根接口的接口
    public static final String BEAN_STRING = "http://120.27.23.105/";
}

 

public interface IConter {

    public interface IView{

        void showData(HomeBean homeBean);

    }

    public interface IPresenter<IView>{

        void attachView(IView iView);

        void datachView(IView iView);

        void showRequestData();

    }

    public interface IModel{

        public interface OnCallBackListenter{

            void OnCallBack(HomeBean homeBean);
        }

        void showResponseData(OnCallBackListenter onCallBackListenter);
    }

}

Model

public class ModelImpl implements IConter.IModel {
    @Override
    public void showResponseData(final OnCallBackListenter onCallBackListenter) {

        Observable<HomeBean> observable = RetrofitUtil.getInstance().getapiService(Contast.BEAN_STRING).getService("1");
        observable
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<HomeBean>() {
                    @Override
                    public void accept(HomeBean homeBean) throws Exception {
                        onCallBackListenter.OnCallBack(homeBean);
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {

                    }
                });

    }

}

Presenter

public class PresenterImpl implements IConter.IPresenter<IConter.IView> {

    IConter.IView iView;
    private ModelImpl model;
    private WeakReference<IConter.IView> iViewWeakReference;
    private WeakReference<ModelImpl> modelWeakReference;

    @Override
    public void attachView(IConter.IView iView) {

        this.iView = iView;
        //创建M层对象
        model = new ModelImpl();
        //防止内存泄漏
        iViewWeakReference = new WeakReference<>(iView);
        modelWeakReference = new WeakReference<>(model);
    }

    @Override
    public void datachView(IConter.IView iView) {

        iViewWeakReference.clear();
        modelWeakReference.clear();

    }

    @Override
    public void showRequestData() {

        model.showResponseData(new IConter.IModel.OnCallBackListenter() {
            @Override
            public void OnCallBack(HomeBean homeBean) {
                iView.showData(homeBean);
            }
        });

    }
}

MainActivity

public class MainActivity extends AppCompatActivity implements IConter.IView {

    @BindView(R.id.recyc_view)
    RecyclerView recycView;
    private IConter.IPresenter presenter;
    private ArrayList<HomeBean.MiaoshaBean.ListBeanX> data = new ArrayList<>();
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        //创建P层对象
        context = MainActivity.this;
        presenter = new PresenterImpl();
        presenter.attachView(this);
        presenter.showRequestData();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        presenter.datachView(this);
    }

    @Override
    public void showData(HomeBean homeBean) {
        data.addAll(homeBean.getMiaosha().getList());
        GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2);
        recycView.setLayoutManager(gridLayoutManager);
        SubAdapter subAdapter = new SubAdapter(context,data);
        recycView.setAdapter(subAdapter);
    }
}

SubAdapter

public class SubAdapter extends RecyclerView.Adapter<SubAdapter.SubViewHolder> {

    Context context;
    ArrayList<HomeBean.MiaoshaBean.ListBeanX> data;

    public SubAdapter(Context context, ArrayList<HomeBean.MiaoshaBean.ListBeanX> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public SubViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
        SubViewHolder subViewHolder = new SubViewHolder(view);
        return subViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull SubViewHolder holder, int position) {

        holder.text_view.setText(data.get(position).getTitle());
        
holder.text_view.setText(data.get(position).getTitle());
String images = data.get(position).getImages();
String substring = images.substring(0, images.indexOf(".jpg") + 4);
holder.show_image_view.setImageURI(Uri.parse(substring));

    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    class SubViewHolder extends RecyclerView.ViewHolder{

        private final SimpleDraweeView show_image_view;
        private final TextView text_view;

        public SubViewHolder(View itemView) {
            super(itemView);
            show_image_view =  itemView.findViewById(R.id.show_image_view);
            text_view = itemView.findViewById(R.id.text_view);
        }
    }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值