retrofit+rxjava 及MVP分层

//***列表展示的网络工具类

public class RetrofitUtils {
    private Retrofit retrofit;

    //单例模式
    public static final class SINGLE_INSTANCE {
        public static final RetrofitUtils _INSTANCE = new RetrofitUtils();
    }

    //方法请求
    public static RetrofitUtils getInstance() {
        return SINGLE_INSTANCE._INSTANCE;
    }

    private RetrofitUtils() {
        retrofit = new Retrofit.Builder()
                .baseUrl(StringUrl.HOME_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(buildOkhttpClient())
                .build();
    }

    //设置读写超时
    private OkHttpClient buildOkhttpClient() {
        return new OkHttpClient.Builder()
                .writeTimeout(3000, TimeUnit.MILLISECONDS)
                .readTimeout(3000, TimeUnit.MILLISECONDS)
                .build();
    }


    public Retrofit getRetrofit() {
        return retrofit;
    }

		public <T> T create(Class<T> clazz) {
			return retrofit.create(clazz);
		}
}

//***登录注册的网络工具类

public class LoginOkHttpUtils {
    private static LoginOkHttpUtils instance;
    private Retrofit retrofit;
    public LoginOkHttpUtils(){
        init();
    }
    public static LoginOkHttpUtils getInstance(){
        if (instance ==null){
            instance = new LoginOkHttpUtils();
        }
        return instance;
    }

    private void init() {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BASIC);
        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
                .build();
        retrofit = new Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(StringUrl.LOGIN_URL)
                .client(client)
                .build();
    }
    //把接口的注解翻译为OKhttp请求
    public <T> T create(final Class<T> service) {
        return retrofit.create(service);
    }

//***请求方式

public interface ApiService {
    /**
     * 登录
     * @param phone
     * @param pwd
     * @return
     */
    @POST("login")
    @FormUrlEncoded
    Observable<ILogin<Login>> getlogin(@Field("phone") String phone,@Field("pwd")String pwd);

    /**
     * 注册
     * @param phone
     * @param pwd
     * @return
     */
    @POST("register")
    @FormUrlEncoded
    Observable<ILogin<Login>> getregister(@Field("phone") String phone,@Field("pwd") String pwd);

    /**
     * 首页
     * @return
     */
    @GET("commodity/v1/commodityList")
    Observable<Home> gethomes();
}

//***接口

public interface DataCall{
    void onSuccesspzsh(Home home);
}

M层

public class HomeModel {
    ApiService apiService = RetrofitUtils.getInstance().create(ApiService.class);
    public Observable<Home> gethome(){
        Observable<Home> gethomes = apiService.gethomes();
        return gethomes;
    }
}

P层

public class HomePresenter {
    private HomeView view;
    private HomeModel model;
    public void attach(HomeView view){
        this.view = view;
        model = new HomeModel();
    }
    public void showhomerxxp(){
        model.gethome()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Home>() {
                    @Override
                    public void accept(Home home) throws Exception {
                        if (home !=null){
                            view.onSuccessrxxp(home);
                        }
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                    view.onFailed(new Exception("网络异常"));
                    }
                });
    }
    
}

//***列表展示的fragment

public class HomesFragment extends Fragment implements HomeView {

    @BindView(R.id.fragment_home_dialog)
    ImageButton fragmentHomeDialog;
    @BindView(R.id.fragment_home_search)
    SearchView fragmentHomeSearch;
    @BindView(R.id.fragment_home_sou)
    ImageButton fragmentHomeSou;
    @BindView(R.id.fragment_home_banner)
    Banner fragmentHomeBanner;
    @BindView(R.id.fragment_home_rxxp_d)
    ImageView fragmentHomeRxxpD;
    @BindView(R.id.fragment_home_xxxp_recy)
    RecyclerView fragmentHomeXxxpRecy;
    @BindView(R.id.fragment_home_mlss_d)
    ImageView fragmentHomeMlssD;
    @BindView(R.id.fragment_home_mlss_recy)
    RecyclerView fragmentHomeMlssRecy;
    @BindView(R.id.fragment_home_pzsh_d)
    ImageView fragmentHomePzshD;
    @BindView(R.id.fragment_home_pzsh_recy)
    RecyclerView fragmentHomePzshRecy;
    Unbinder unbinder;
    private List<Home.ResultBean.RxxpBean.CommodityListBean> rxxpList;
    private List<Home.ResultBean.MlssBean.CommodityListBeanXX> mlssList;
    private List<Home.ResultBean.PzshBean.CommodityListBeanX> pzshList;
    private HomePresenter homePresenter;
    private Fragment_Home_Rxxp_Adapter home_rxxp_adapter;
    private Fragment_Home_Mlss_Adapter home_mlss_adapter;
    private Fragment_Home_Pzsh_Adapter home_pzsh_adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_homes, container, false);
        unbinder = ButterKnife.bind(this, view);
        initData();
        return view;
    }

    private void initData() {
        rxxpList = new ArrayList<>();
        mlssList = new ArrayList<>();
        pzshList = new ArrayList<>();

        RecyclerView.LayoutManager manager1 = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL);
        fragmentHomeXxxpRecy.setLayoutManager(manager1);
        home_rxxp_adapter = new Fragment_Home_Rxxp_Adapter(getActivity(),rxxpList);
        fragmentHomeXxxpRecy.setAdapter(home_rxxp_adapter);
        homePresenter = new HomePresenter();
        homePresenter.attach(this);
        homePresenter.showhomerxxp();
        RecyclerView.LayoutManager manager2 = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
        fragmentHomeMlssRecy.setLayoutManager(manager2);
        home_mlss_adapter = new Fragment_Home_Mlss_Adapter(getActivity(),mlssList);
        fragmentHomeMlssRecy.setAdapter(home_mlss_adapter);
        homePresenter = new HomePresenter();
        homePresenter.attach(this);
        homePresenter.showhomemlss();


        RecyclerView.LayoutManager manager3 = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
        fragmentHomePzshRecy.setLayoutManager(manager3);
        home_pzsh_adapter = new Fragment_Home_Pzsh_Adapter(getActivity(),pzshList);
        fragmentHomePzshRecy.setAdapter(home_pzsh_adapter);
        homePresenter = new HomePresenter();
        homePresenter.attach(this);
        homePresenter.showhomepzsh();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbinder.unbind();
    }

    @OnClick({R.id.fragment_home_dialog, R.id.fragment_home_sou, R.id.fragment_home_rxxp_d, R.id.fragment_home_mlss_d, R.id.fragment_home_pzsh_d})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.fragment_home_dialog:
                break;
            case R.id.fragment_home_sou:
                break;
            case R.id.fragment_home_rxxp_d:
                break;
            case R.id.fragment_home_mlss_d:
                break;
            case R.id.fragment_home_pzsh_d:
                break;
        }
    }

    @Override
    public void onSuccessrxxp(Home home) {
        if (home !=null){
            Home.ResultBean result = home.getResult();
            List<Home.ResultBean.RxxpBean> rxxp = result.getRxxp();
            List<Home.ResultBean.RxxpBean.CommodityListBean> commodityrxxp = rxxp.get(0).getCommodityList();
            rxxpList.clear();
            rxxpList.addAll(commodityrxxp);
            home_rxxp_adapter.notifyDataSetChanged();

        }
    }

    @Override
    public void onSuccessmlss(Home home) {
        if (home !=null){
            Home.ResultBean result = home.getResult();
            List<Home.ResultBean.MlssBean> mlss = result.getMlss();
            List<Home.ResultBean.MlssBean.CommodityListBeanXX> commoditymlss = mlss.get(0).getCommodityList();
            mlssList.clear();
           mlssList.addAll(commoditymlss);
           home_mlss_adapter.notifyDataSetChanged();

        }
    }

    @Override
    public void onSuccesspzsh(Home home) {
        if (home !=null){
            Home.ResultBean result = home.getResult();
            List<Home.ResultBean.PzshBean> pzsh = result.getPzsh();
            List<Home.ResultBean.PzshBean.CommodityListBeanX> commoditypzsh = pzsh.get(0).getCommodityList();
            pzshList.clear();
            pzshList.addAll(commoditypzsh);
            home_pzsh_adapter.notifyDataSetChanged();

        }
    }

    @Override
    public void onFailed(Exception e) {
        Log.i("000", "onFiled: " + e.getMessage());

    }
}

//登录的

case R.id.login_button:
                username = loginPhone.getText().toString().trim();
                password = loginPassword.getText().toString().trim();
                if (TextUtils.isEmpty(username)&& TextUtils.isEmpty(password)) {
                    Toast.makeText(this, "账号和密码不能为空", Toast.LENGTH_SHORT).show();
                } else {
                    ApiService apiService = LoginOkHttpUtils.getInstance().create(ApiService.class);
                    apiService.getlogin(username,password)
                            .subscribeOn(Schedulers.io())
                            .observeOn(AndroidSchedulers.mainThread())
                            .subscribe(new Consumer<ILogin<Login>>() {
                                @Override
                                public void accept(ILogin<Login> loginILogin) throws Exception {
                                    if (loginILogin.getStatus().equals("0000")){
                                        Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                                        Intent intent = new Intent(LoginActivity.this,MainActivity.class);
                                        startActivity(intent);
                                    }
                                }
                            });
                }

                break;

猜你喜欢

转载自blog.csdn.net/weixin_43092479/article/details/85592950