1.Shop IView
public interface IView { void success(); void failed(Throwable t); void getShopData(ShopBean shopBean); }
2.APP
public class App extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
3MainActivity
package com.example.lenovo.week1103.mvp.view; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.widget.Toast; import com.example.lenovo.week1103.R; import com.example.lenovo.week1103.ShopDataActivity; import com.example.lenovo.week1103.adapter.ShopAdapter; import com.example.lenovo.week1103.bean.ShopBean; import com.example.lenovo.week1103.mvp.presenter.ShopPresenter; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class MainActivity extends AppCompatActivity implements IView{ @BindView(R.id.rv) RecyclerView rv; private ShopPresenter presenter; private List<ShopBean.DataBean.MiaoshaBean.ListBean> list; private ShopAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); presenter = new ShopPresenter(); presenter.attach(this); initData(); } private void initData() { presenter.getShop(); list = new ArrayList<>(); adapter = new ShopAdapter(this,list); RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL); rv.setLayoutManager(layoutManager); rv.setAdapter(adapter); //点击跳转详情页 adapter.setOnShopClickListener(new ShopAdapter.OnShopClickListener() { @Override public void onShopClick(int pid) { Intent intent = new Intent(MainActivity.this, ShopDataActivity.class); intent.putExtra("pid",pid); startActivity(intent); } }); } @Override public void success() { Toast.makeText(this, "网络请求成功", Toast.LENGTH_SHORT).show(); } @Override public void failed(Throwable t) { Toast.makeText(this, "" + t.getMessage(), Toast.LENGTH_SHORT).show(); } @Override public void getShopData(ShopBean shopBean) { if (shopBean != null){ // Log.i("12345678",shopBean.getCode()+""); list.clear(); list.addAll(shopBean.getData().getMiaosha().getList()); adapter.notifyDataSetChanged(); } } @Override protected void onDestroy() { super.onDestroy(); //解绑 if (presenter != null){ presenter.detach(); } } }
4 ShopMode
package com.example.lenovo.week1103.mvp.model; import com.example.lenovo.week1103.bean.ShopBean; import com.example.lenovo.week1103.contrant.IShoppingApi; import com.example.lenovo.week1103.inter.ICallBack; import com.example.lenovo.week1103.utils.HttpUtils; import com.google.gson.Gson; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; /** * */ public class ShopModel { public void getData( final ICallBack callBack){ IShoppingApi iShoppingApi = HttpUtils.getInstance().create(IShoppingApi.class); Call<ShopBean> shopBeanCall = iShoppingApi.show(); shopBeanCall.enqueue(new Callback<ShopBean>() { @Override public void onResponse(Call<ShopBean> call, Response<ShopBean> response) { if(response.isSuccessful()&&response.body()!=null&&"0".equals(response.body().getCode())){ ShopBean body = response.body(); callBack.success(body); }else{ } } @Override public void onFailure(Call<ShopBean> call, Throwable t) { callBack.failed((Exception) t); } }); } }
5. Presenter
package com.example.lenovo.week1103.mvp.presenter; import android.util.Log; import com.example.lenovo.week1103.bean.ShopBean; import com.example.lenovo.week1103.inter.ICallBack; import com.example.lenovo.week1103.mvp.model.ShopModel; import com.example.lenovo.week1103.mvp.view.IView; /** * */ public class ShopPresenter { private IView iv; //private int id =21; private ShopModel model; public void attach(IView iv){ this.iv = iv; model = new ShopModel(); } public void getShop(){ model.getData(new ICallBack<ShopBean>() { @Override public void success(ShopBean shopBean) { iv.success(); if(shopBean.getData() != null){ iv.getShopData(shopBean); } } @Override public void failed(Exception e) { iv.failed(e); } }); } public void detach(){ if(iv != null){ iv = null; } } }
6 ICallBack
public interface ICallBack<T> { void success(T t); void failed(Exception e); }
7 API
public interface IShoppingApi { //商品展示 @GET("home/getHome") Call<ShopBean> show(); //商品详情 @GET("product/getProductDetail") Call<Product> showBean (@Query("pid")int pid); }
8 Utils
package com.example.lenovo.week1103.utils; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * */ public class HttpUtils { private static final String BASE_URL = "http://www.zhaoapi.cn/"; private Retrofit mRetrofit; private static final class SINGLE{ private static final HttpUtils INSTANCE = new HttpUtils(); } public static HttpUtils getInstance(){ return SINGLE.INSTANCE; } private HttpUtils(){ mRetrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(buildOkhttpClient()) .build(); } private OkHttpClient buildOkhttpClient(){ 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); } }
9 去掉s
public class ImgProcess { public static String getImg(String img){ String[] a = img.split("\\|"); return a[0]; } }
10 ShowAdapter
package com.example.lenovo.week1103.adapter; import android.content.Context; import android.net.Uri; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import com.example.lenovo.week1103.R; import com.example.lenovo.week1103.bean.ShopBean; import com.example.lenovo.week1103.utils.ImgProcess; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; /** * */ public class ShopAdapter extends RecyclerView.Adapter<ShopAdapter.Holder> { //接口回调 public interface OnShopClickListener{ void onShopClick(int pid); } private OnShopClickListener listener; public void setOnShopClickListener(OnShopClickListener listener){ this.listener = listener; } private Context context; private List<ShopBean.DataBean.MiaoshaBean.ListBean> list; public ShopAdapter(Context context, List<ShopBean.DataBean.MiaoshaBean.ListBean> list) { this.context = context; this.list = list; } @Override public Holder onCreateViewHolder(ViewGroup parent, int viewType) { View v = View.inflate(context,R.layout.item_shop,null); return new Holder(v); } @Override public void onBindViewHolder(Holder holder, final int position) { holder.txtCount.setText(list.get(position).getTitle()); holder.imgLogo.setImageURI(Uri.parse(ImgProcess.getImg(list.get(position).getImages()))); holder.imgLogo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { listener.onShopClick(list.get(position).getPid()); } }); } @Override public int getItemCount() { return list.size(); } class Holder extends RecyclerView.ViewHolder{ @BindView(R.id.img_logo) SimpleDraweeView imgLogo; @BindView(R.id.txt_count) TextView txtCount; public Holder(View itemView) { super(itemView); ButterKnife.bind(this,itemView); } } }
11 详情页 Prodct Ivew
public interface IViewDetail { void getShopDetail(Product product); void onFailed(Throwable t); }
12 model
package com.example.lenovo.week1103.product.model; import com.example.lenovo.week1103.bean.Product; import com.example.lenovo.week1103.bean.ShopBean; import com.example.lenovo.week1103.contrant.IShoppingApi; import com.example.lenovo.week1103.inter.ICallBack; import com.example.lenovo.week1103.utils.HttpUtils; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; /** * Created by lenovo on 2018/11/4. */ public class ProductModel { public void getProduct(int pid, final ICallBack callBack){ IShoppingApi iShoppingApi = HttpUtils.getInstance().create(IShoppingApi.class); Call<Product> call = iShoppingApi.showBean(pid); call.enqueue(new Callback<Product>() { @Override public void onResponse(Call<Product> call, Response<Product> response) { if (response.isSuccessful()){ if (response.body() != null &"0".equals(response.body().getCode())){ Product body = response.body(); callBack.success(body); } } } @Override public void onFailure(Call<Product> call, Throwable t) { callBack.failed((Exception) t); } }); } }
13 presenter
package com.example.lenovo.week1103.product.presenter; import com.example.lenovo.week1103.bean.Product; import com.example.lenovo.week1103.inter.ICallBack; import com.example.lenovo.week1103.product.model.ProductModel; import com.example.lenovo.week1103.product.view.IViewDetail; /** * */ public class ProductPresenter { private IViewDetail iv; private ProductModel model; public void attach(IViewDetail iv){ this.iv=iv; model = new ProductModel(); } public void detach(){ if (iv!=null){ iv=null; } } public void getShopDetail(int pid){ model.getProduct(pid, new ICallBack<Product>() { @Override public void success(Product product) { iv.getShopDetail(product); } @Override public void failed(Exception e) { iv.onFailed(e); } }); } }
14 ShopDataActivity
package com.example.lenovo.week1103; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ListView; import com.example.lenovo.week1103.adapter.ProductAdapter; import com.example.lenovo.week1103.bean.Product; import com.example.lenovo.week1103.product.presenter.ProductPresenter; import com.example.lenovo.week1103.product.view.IViewDetail; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; public class ShopDataActivity extends AppCompatActivity implements IViewDetail { @BindView(R.id.lv) ListView lv; private List<Product> list; private ProductPresenter presenter; private ProductAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shop_data); ButterKnife.bind(this); Intent intent = getIntent(); int i = intent.getIntExtra("pid", -1); presenter = new ProductPresenter(); presenter.attach(this); presenter.getShopDetail(i); list = new ArrayList<>(); adapter = new ProductAdapter(this,list); lv.setAdapter(adapter); } @Override public void getShopDetail(Product product) { list.clear(); list.add(product); adapter.notifyDataSetChanged(); } @Override public void onFailed(Throwable t) { } @Override protected void onDestroy() { super.onDestroy(); if (presenter!=null){ presenter.detach(); } } }