utils
public class RetrofitManager { private static final String URL = "http://www.zhaoapi.cn/"; private final Retrofit mRetrofit; private static final class Instance{ private static final RetrofitManager instance = new RetrofitManager(); } public static RetrofitManager getInstance(){ return Instance.instance; } private RetrofitManager(){ mRetrofit = new Retrofit.Builder() .baseUrl(URL) .addConverterFactory(GsonConverterFactory.create()) .client(client()) .build(); } private OkHttpClient client(){ return new OkHttpClient.Builder() .readTimeout(5000,TimeUnit.MILLISECONDS) .writeTimeout(5000, TimeUnit.MILLISECONDS) .build(); } public Retrofit getmRetrofit(){ return mRetrofit; } public <T> T create(Class<T> clazz){ return mRetrofit.create(clazz); } }
api
public interface IViewApi { @POST("home/getHome") Call<ProductBean> product(); @FormUrlEncoded @POST("product/getProductDetail") Call<XIangQingBean> XiangQing(@Field("pid") int pid); }
view
public interface IView { void failed(Exception e); void getProduct(List<ProductBean.DataBean.FenleiBean> list); void getXiangQing(XIangQingBean.DataBean beanL); }
IcallBack
public interface ICallBack { void success(Object obj); void failed(Exception e); }
model
public class ProductModel { int id; public void getProduct(final ICallBack callBack){ IViewApi iViewApi = RetrofitManager.getInstance().create(IViewApi.class); Call<ProductBean> product = iViewApi.product(); product.enqueue(new Callback<ProductBean>() { @Override public void onResponse(Call<ProductBean> call, Response<ProductBean> response) { if (response.isSuccessful()){ ProductBean body = response.body(); callBack.success(body); } } @Override public void onFailure(Call<ProductBean> call, Throwable t) { callBack.failed((Exception) t); } }); } public void getXiangqing(final ICallBack callBack,int id){ IViewApi iViewApi = RetrofitManager.getInstance().create(IViewApi.class); Call<XIangQingBean> xiangQing = iViewApi.XiangQing(id); xiangQing.enqueue(new Callback<XIangQingBean>() { @Override public void onResponse(Call<XIangQingBean> call, Response<XIangQingBean> response) { if (response.isSuccessful()){ XIangQingBean bodys = response.body(); callBack.success(bodys); } } @Override public void onFailure(Call<XIangQingBean> call, Throwable t) { callBack.failed((Exception) t); } }); } }
presenter
public class ProductPresenter { private IView iv; private ProductModel model; public void attach(IView iv){ this.iv = iv; model = new ProductModel(); } public void detach(){ if (iv != null){ iv = null; } } public void getProduct(){ model.getProduct(new ICallBack() { @Override public void success(Object obj) { ProductBean data= (ProductBean) obj; iv.getProduct(data.getData().getFenlei()); } @Override public void failed(Exception e) { } }); } public void getXiangQing(int id){ model.getXiangqing(new ICallBack() { @Override public void success(Object obj) { XIangQingBean qingBean = (XIangQingBean) obj; iv.getXiangQing(qingBean.getData()); } @Override public void failed(Exception e) { } },id); } }
adapter
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ViewHolder> { private Context context; private List<ProductBean.DataBean.FenleiBean> list; public ProductAdapter(Context context, List<ProductBean.DataBean.FenleiBean> list) { this.context = context; this.list = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = View.inflate(context, R.layout.layout_lisr,null); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { holder.imageLogo.setImageURI(list.get(position).getIcon()); holder.txtTitle.setText(list.get(position).getName()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, ShowActivity.class); intent.putExtra("id",list.get(position).getCid()); context.startActivity(intent); } }); } @Override public int getItemCount() { return list.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ private SimpleDraweeView imageLogo; private TextView txtTitle; public ViewHolder(View itemView) { super(itemView); imageLogo = itemView.findViewById(R.id.image_logo); txtTitle = itemView.findViewById(R.id.txt_title); } } }
mainactivity
public class MainActivity extends AppCompatActivity implements IView { private ProductModel model; private RecyclerView rvProduct; private List<ProductBean.DataBean.FenleiBean> lists; private ProductPresenter presenter; private ProductAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rvProduct = findViewById(R.id.rc_product); presenter = new ProductPresenter(); lists = new ArrayList<>(); presenter.attach(this); presenter.getProduct(); adapter = new ProductAdapter(this,lists); RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); rvProduct.setLayoutManager(layoutManager); rvProduct.setAdapter(adapter); } @Override public void failed(Exception e) { } @Override public void getProduct(List<ProductBean.DataBean.FenleiBean> list) { if (list != null){ lists.clear(); lists.addAll(list); adapter.notifyDataSetChanged(); } } @Override public void getXiangQing(XIangQingBean.DataBean beanL) { } }
showactivity
public class ShowActivity extends AppCompatActivity implements IView { @BindView(R.id.image_logo) SimpleDraweeView imageLogo; @BindView(R.id.txt_title) TextView txtTitle; private ProductPresenter presenter; private List<XIangQingBean.DataBean> list; private XiangQingAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show); ButterKnife.bind(this); presenter = new ProductPresenter(); presenter.attach(this); int id = getIntent().getIntExtra("id",1); presenter.getXiangQing(id); } @Override public void failed(Exception e) { } @Override public void getProduct(List<ProductBean.DataBean.FenleiBean> list) { } @Override public void getXiangQing(XIangQingBean.DataBean beanL) { Log.i("aaaaaaaaaaaaaaaaaaaaaaa", "getProduct: " + beanL); imageLogo.setImageURI(beanL.getImages().split("\\|")[0]); txtTitle.setText(beanL.getTitle()); } }