12

接口:
http://172.17.8.100/small/commodity/v1/commodityList

Bean类:
左侧Bean类:
public class LeftBean {

public String message;
public String status;
public List<Left> result;

public static class Left {
    public String id;
    public String name;
    public List<Category> secondCategoryVo;

    public static class Category {
        public String id;
        public String name;
    }
}

}

右侧Bean类:
public class RightBean {

public String message;
public String status;
public List<Right> result;

public static class Right{
    public String commodityId;
    public String commodityName;
    public String masterPic;
    public String price;
    public String saleNum;

}

}

GreenDaoBean类:
@Entity
public class GreenDaoBean {

@Id(autoincrement = true)
private Long id;
private String json;
private String key;

}

Api类:
public class Api {

public static final String BASE_URL = "http://172.17.8.100/";
public static final String HOME_URL = "small/commodity/v1/commodityList";

}

public interface Apiservice {

@GET("small/commodity/v1/findCategory")
Observable<LeftBean> getLeft();

@GET("small/commodity/v1/findCommodityByCategory")
Observable<RightBean> getRight(@QueryMap HashMap<String,String> params);

}

契约类:
public interface IContract {

interface IModel {
    void getLeftData(IModelCallback modelCallback);

    void getRightData(HashMap<String, String> params, IModelCallback modelCallback);

}

interface IModelCallback {
    void success(Object o);

    void failure(Throwable throwable);
}

interface IView {
    void success(Object o);

    void failure(Throwable throwable);
}

interface IPresenter {
    void getLeftData();

    void getRightData(HashMap<String, String> params);
}

}

封装网络工具类:
public class RetrofitUtils {

private static RetrofitUtils retrofitUtils;
private Retrofit retrofit;

private RetrofitUtils() {
    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
            .build();

    retrofit = new Retrofit.Builder()
            .baseUrl(Api.BASE_URL)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build();
}

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

public <T> T createservice(Class<T> tClass) {
    T t = retrofit.create(tClass);
    return t;
}

public boolean isNet() {
    return NetworkUtils.isConnected();
}

}

M层:
public class Model implements IContract.IModel {
@Override
public void getLeftData(final IContract.IModelCallback modelCallback) {
RetrofitUtils.getInstance().createservice(Apiservice.class)
.getLeft()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(LeftBean leftBean) {
                    modelCallback.success(leftBean);
                }

                @Override
                public void onError(Throwable e) {
                    modelCallback.success(e);
                }

                @Override
                public void onComplete() {

                }
            });
}

@Override
public void getRightData(HashMap<String, String> params, final IContract.IModelCallback modelCallback) {
    RetrofitUtils.getInstance().createservice(Apiservice.class)
            .getRight(params)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<RightBean>() {
                @Override
                public void onSubscribe(Disposable d) {

                }

                @Override
                public void onNext(RightBean rightBean) {
                    modelCallback.success(rightBean);
                }

                @Override
                public void onError(Throwable e) {
                    modelCallback.failure(e);
                }

                @Override
                public void onComplete() {

                }
            });
}

}

P层:
public class Presenter implements IContract.IPresenter {

private IContract.IView iView;
private Model model;

public Presenter(IContract.IView iView) {
    this.iView = iView;
    this.model = new Model();
}

@Override
public void getLeftData() {
    model.getLeftData(new IContract.IModelCallback() {
        @Override
        public void success(Object o) {
            iView.success(o);
        }

        @Override
        public void failure(Throwable throwable) {
            iView.failure(throwable);
        }
    });

}

@Override
public void getRightData(HashMap<String, String> params) {
    model.getRightData(params, new IContract.IModelCallback() {
        @Override
        public void success(Object o){
            iView.success(o);
        }

        @Override
        public void failure(Throwable throwable) {
            iView.failure(throwable);
        }
    });
}

}

左侧的适配器:
public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.MyViewHolder> {

private Context context;
private List<LeftBean.Left.Category> categoryList;

public LeftAdapter(Context context, List<LeftBean.Left.Category> categoryList) {
    this.context = context;
    this.categoryList = categoryList;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = View.inflate(context, R.layout.left_layout, null);
    MyViewHolder myViewHolder = new MyViewHolder(view);
    return myViewHolder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
    holder.tv.setText(categoryList.get(position).name);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            leftClick.leftItemClick(categoryList.get(position).id);
        }
    });
}

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

class MyViewHolder extends RecyclerView.ViewHolder {
    private TextView tv;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        tv = itemView.findViewById(R.id.tv);
    }
}

private LeftClick leftClick;

public void setLeftClick(LeftClick leftClick) {
    this.leftClick = leftClick;
}

public interface LeftClick {
    void leftItemClick(String id);
}

}

右侧适配器:
public class RightAdapter extends RecyclerView.Adapter<RightAdapter.MyViewHolder> {

private Context context;
private List<RightBean.Right> list;

public RightAdapter(Context context, List<RightBean.Right> list) {
    this.context = context;
    this.list = list;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = View.inflate(context, R.layout.right_layout, null);
    MyViewHolder myViewHolder = new MyViewHolder(view);
    return myViewHolder;
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.tv.setText(list.get(position).commodityName);
    Glide.with(context).load(list.get(position).masterPic)
            .error(R.mipmap.ic_launcher)
            .placeholder(R.mipmap.ic_launcher)
            .transform(new RoundedCorners(10))
            .into(holder.iv);
}

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

class MyViewHolder extends RecyclerView.ViewHolder {
    private TextView tv;
    private ImageView iv;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        tv = itemView.findViewById(R.id.tv);
        iv = itemView.findViewById(R.id.iv);
    }
}

}

主页面:
public class MainActivity extends AppCompatActivity implements IContract.IView {

private RecyclerView leftrv;
private RecyclerView rightrv;
private Presenter presenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    presenter = new Presenter(this);
    leftrv = findViewById(R.id.rv_left);
    rightrv = findViewById(R.id.rv_right);
    leftrv.setLayoutManager(new LinearLayoutManager(this));
    rightrv.setLayoutManager(new GridLayoutManager(this, 2));
    //注册evenbus;
    EventBus.getDefault().register(this);
    if (RetrofitUtils.getInstance().isNet()) {
        presenter.getLeftData();
    } else {
        Toast.makeText(this, "没有网络连接", Toast.LENGTH_SHORT).show();
    }
}

@Override
public void success(Object o) {
    if (o instanceof LeftBean) {
        LeftBean leftBean = (LeftBean) o;
        LeftAdapter leftAdapter = new LeftAdapter(this, leftBean.result.get(0).secondCategoryVo);
        leftrv.setAdapter(leftAdapter);
        leftAdapter.setLeftClick(new LeftAdapter.LeftClick() {
            @Override
            public void leftItemClick(String id) {
                EventBus.getDefault().post(id);
            }
        });
    } else if (o instanceof RightBean) {
        RightBean rightEntity = (RightBean) o;
        RightAdapter rightAdapter = new RightAdapter(this, rightEntity.result);
        rightrv.setAdapter(rightAdapter);
    }
}

@Override
public void failure(Throwable throwable) {

}

@Subscribe
public void getId(String id) {
    HashMap<String, String> params = new HashMap<>();
    params.put("categoryId", id);
    params.put("page", "1");
    params.put("count", "10");
    presenter.getRightData(params);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    EventBus.getDefault().unregister(this);
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值