封装:
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);