MVP+封装

封装:
package com.example.jddemo.MVP.model;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;


public class HttpUtils {
    public final Api apiClient;
    private HttpUtils(){
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addNetworkInterceptor(new LoggingInterceptor())
                .build();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(Contant.BASE_URI)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();

        apiClient = retrofit.create(Api.class);
    }
    //日志拦截器
    class LoggingInterceptor implements Interceptor {
        @Override public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            long t1 = System.nanoTime();
            Response response = chain.proceed(request);
            long t2 = System.nanoTime();
            return response;
        }
    }

    private static class GetHttpUtilsInstance {
        private static HttpUtils httpUtils =  new HttpUtils();
    }
    public static HttpUtils getHttpUtilsInstance() {
        return GetHttpUtilsInstance.httpUtils;
    }
}
V层:
public interface IBaseView {

}
public interface IMainView extends IBaseView{
    void onSuccess(Bean.DataBean data);
    void onrSuccess(List<Beans.DataBean> beans);
    void onError(String error,String errormsg);
}

m层:

public static final String BASE_URI = "https://www.zhaoapi.cn/";
public static final String Sousuo = "https://www.zhaoapi.cn/";
@GET("home/getHome")
Observable<Bean> tohome();
@GET("product/searchProducts")
Observable<SouBean> Sousuo(@Query("keywords") String keywords, @Query("page") int page);
package com.example.jddemo.MVP.model;

import android.util.Log;

import com.example.jddemo.UserBean.Beans;
import com.example.jddemo.UserBean.SouBean;

import java.util.List;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

public class SouModel {
    public void RightModel(String name,int page, final loadData loadData){
        Observable<SouBean> sousuo = HttpUtils.getHttpUtilsInstance().apiClient.Sousuo(name, page);
        sousuo.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<SouBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        
                    }
                    @Override
                    public void onNext(SouBean souBean) {
                        List<SouBean.DataBean> data = souBean.getData();
                        loadData.onSuccess(data);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }

    public interface  loadData{
        void onSuccess(List<SouBean.DataBean> data);
    }
}
p层:
basepresenter封装:
package com.example.jddemo.MVP.persenter;

import com.example.jddemo.MVP.IView.IBaseView;

public class BasePersenter<V extends IBaseView> {
    private V v;

    public void attacthView(V v){
        this.v = v;
    }
    public void dataView(){
        this.v = null;
    }
    public V getView(){
        return v;
    }
}
有参:
package com.example.jddemo.MVP.persenter;

import android.util.Log;

import com.example.jddemo.MVP.IView.SouView;
import com.example.jddemo.MVP.model.HttpUtils;
import com.example.jddemo.MVP.model.SouModel;
import com.example.jddemo.MVP.model.XiangModel;
import com.example.jddemo.UserBean.Bean;
import com.example.jddemo.UserBean.SouBean;

import java.util.List;


public class SouPresenter extends BasePersenter<SouView>{

 private final SouModel souModel;

 public SouPresenter() {
  souModel = new SouModel();
 }

 public void Sou(String name, int page){
     souModel.RightModel(name, page, new SouModel.loadData() {
      @Override
      public void onSuccess(List<SouBean.DataBean> data) {
         getView().onSuccess(data);
      }
     });
    }
 }
无参:
package com.example.jddemo.MVP.persenter;

import com.example.jddemo.MVP.IView.IMainView;
import com.example.jddemo.MVP.model.HttpUtils;
import com.example.jddemo.UserBean.Bean;

import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;

public class MainPersenter extends BasePersenter<IMainView>{

    public void loadDataFroNet(){
        Observable<Bean> tohome = HttpUtils.getHttpUtilsInstance().apiClient.tohome();
        tohome.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Bean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }
                    @Override
                    public void onNext(Bean bean) {
                        Bean.DataBean data = bean.getData();
                        getView().onSuccess(data);
                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
    }
}
recyclerview点击事件:
itemView.setOnClickListener(this);
@Override
public void onClick(View v) {
    int layoutPosition = getLayoutPosition();
    onItemclickLinsten.onclick(layoutPosition);
}
onItemclickLinsten onItemclickLinsten;

public interface onItemclickLinsten{
    void onclick(int layoutPosition);
}
public void setonItemclickLinsten(TuiAdapter.onItemclickLinsten onItemclickLinsten){
    this.onItemclickLinsten= onItemclickLinsten;
}

任务管理器:

GridLayoutManager manager1 = new GridLayoutManager(getActivity(), 2, GridLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(manager1);

猜你喜欢

转载自blog.csdn.net/p_19971113/article/details/83267790