接口:
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);
}
}