retrofit+mvp

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());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值