1. 程式人生 > >Android 詳情頁跳轉購物車

Android 詳情頁跳轉購物車

   1.新增依賴:

//recyclerView獲取資料
compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'
// fresco圖片載入
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.facebook.fresco:animated-gif:0.12.0'
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.google.code.gson:gson:2.8.2' compile 'io.github.openfeign:feign-gson:9.5.1' compile 'com.android.support:recyclerview-v7:26.0.0-alpha1' compile 'com.github.bumptech.glide:glide:3.7.0'
2.全選
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
3.Api:
public class 
Api { public static String DETAIL = "https://www.zhaoapi.cn/product/getProductDetail"; //詳情介面 public static String ADDCART = "https://www.zhaoapi.cn/product/addCart"; //新增購物車 public static String GETCART = "https://www.zhaoapi.cn/product/getCarts"; //獲得展示購物車(二級列表 需傳uid,pid
public interface 
OnNetListener<T> { public void onSuccess(T t); public void onFailure(Exception e); }
public class HttpUtils {
private static volatile HttpUtils httpUtils;
private final OkHttpClient client;
/**
     * 初始化Retrofit 單例模式
*/
private HttpUtils(){
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
                .addInterceptor(new MyInterceptor())
                .build();
}
//執行緒安全
public static HttpUtils getHttpUtils(){
if (httpUtils == null){
synchronized (HttpUtils.class){
if (httpUtils == null){
httpUtils = new HttpUtils();
}
            }
        }
return httpUtils;
}
public void doGet(String url, Callback callback){
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
public void doPost(String url, Map<String, String> params, Callback callback){
if (params == null) {
throw new RuntimeException("引數為空了");
}
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
client.newCall(request).enqueue(callback);
}
}
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (request.method().equals("GET")){
String url = request.url().url().toString();
url += "&source=android";
Request newRequest = request.newBuilder().url(url).build();
return chain.proceed(newRequest);
}else {
FormBody formBody = (FormBody) request.body();
FormBody.Builder builder = new FormBody.Builder();
for (int i = 0; i <formBody.size(); i++){
builder.add(formBody.name(i), formBody.value(i));
}
builder.add("source", "android");
FormBody newFormBody = builder.build();
Request newRequest = request.newBuilder().url(request.url().url().toString()).post(newFormBody).build();
return chain.proceed(newRequest);
}
    }
}
Bean
public class PriceAndCount {
private double price;
private int count;
public PriceAndCount(double price, int count) {
this.price = price;
this.count = count;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
詳情,新增,購物車Bean類\

4.view

public interface IMainListener {
void show(DetailsBean detailsBean);
void show(String str);
}
public interface IMainListener {
void show(DetailsBean detailsBean);
void show(String str);
}
5.model
public interface DetailsService {
void getProductDetail(Map<String, String> params, OnNetListener<DetailsBean> onNetListener);
}
public class DetailsModel implements DetailsService {
private Handler handler = new Handler(Looper.getMainLooper());
@Override
public void getProductDetail(Map<String, String> params, final OnNetListener<DetailsBean> onNetListener) {
HttpUtils.getHttpUtils().doPost(Api.DETAIL, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
            }
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final DetailsBean detailsBean = new Gson().fromJson(string, DetailsBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(detailsBean);
}
                });
}
        });
}
}
public interface AddCartService {
void addCart(Map<String, String> params, OnNetListener<AddCartBean> onNetListener);
}
public class AddCartModel implements AddCartService {
private Handler handler = new Handler(Looper.getMainLooper());
@Override
public void addCart(Map<String, String> params, final OnNetListener<AddCartBean> onNetListener) {
HttpUtils.getHttpUtils().doPost(Api.ADDCART, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
            }
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final AddCartBean addCartBean = new Gson().fromJson(string, AddCartBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(addCartBean);
}
                });
}
        });
}
}
public interface GetCartService {
void getCart(Map<String, String> params, OnNetListener<GetCartBean> onNetListener);
}
public class GetCartModel implements GetCartService {
private Handler handler = new Handler(Looper.getMainLooper());
@Override
public void getCart(Map<String, String> params, final OnNetListener<GetCartBean> onNetListener) {
HttpUtils.getHttpUtils().doPost(Api.GETCART, params, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
            }
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final GetCartBean getCartBean = new Gson().fromJson(string, GetCartBean.class);
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onSuccess(getCartBean);
}
                });
}
        });
}
}
public class DetailsPresenter {
private IMainListener iMainListener;
private DetailsService detailsService;
public DetailsPresenter(IMainListener iMainListener) {
this.iMainListener = iMainListener;
detailsService = new DetailsModel();
}
public void dettach() {
iMainListener = null;
}
public void getProductDetail() {
Map<String, String> params = new HashMap<>();
params.put("pid", "71");
detailsService.getProductDetail(params, new OnNetListener<DetailsBean>() {
@Override
public void onSuccess(DetailsBean detailsBean) {
if (iMainListener != null) {
iMainListener.show(detailsBean);
}
            }
@Override
public void onFailure(Exception e) {
            }
        });
}
}
public class AddCartPresenter {
private IMainListener iMainListener;
private AddCartService addCartService;
public AddCartPresenter(IMainListener iMainListener) {
this.iMainListener = iMainListener;
addCartService = new AddCartModel();
}
public void dettach() {
iMainListener = null;
}
public void addCart() {
Map<String, String> params = new HashMap<>();
params.put("pid", "71");
params.put("uid", "39");
addCartService.addCart(params, new OnNetListener<AddCartBean>() {
@Override
public void onSuccess(AddCartBean addCartBean) {
if (iMainListener != null) {
iMainListener.show(addCartBean.getCode().equals("0") ? "新增成功了" : "新增失敗了");
}
            }
@Override
public void onFailure(Exception e) {
            }
        });
}
}
public class GetCartPresenter {
private ISecondListener iSecondListener;
private final GetCartService getCartService;
public GetCartPresenter(ISecondListener iSecondListener) {
this.iSecondListener = iSecondListener;
getCartService = new GetCartModel();
}
public void dettach() {
iSecondListener = null;
}
public void getCart() {
Map<String, String> params = new HashMap<>();
params.put("uid", "1234");
params.put("pid", "71");
getCartService.getCart(params, new OnNetListener<GetCartBean>() {
@Override
public void onSuccess(GetCartBean getCartBean) {
if (iSecondListener != null) {
List<GetCartBean.DataBean> group = getCartBean.getData();
List<List<GetCartBean.DataBean.ListBean>> child = new ArrayList<>();
for (int i = 0; i < group.size(); i++) {
child.add(group.get(i).getList());
}
iSecondListener.show(group, child);
}
            }
@Override
public void onFailure(Exception e) {
            }
        });
}
}
MainActivity
/**
 * 詳情頁面
*/
public class MainActivity extends AppCompatActivity implements IMainListener, View.OnClickListener{
private DetailsPresenter detailsPresenter;
private ImageView mIv;
private TextView mTvBargainPrice;
private TextView mTvPrice;
/**
     * 購物車
*/
private TextView mTvCart;
/**
     * 加入購物車
*/
private TextView mTvAddCart;
private AddCartPresenter addCartPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
detailsPresenter = new DetailsPresenter(this);
addCartPresenter = new AddCartPresenter(this);
detailsPresenter.getProductDetail();
}
@Override
protected void onDestroy() {
super.onDestroy();
detailsPresenter.dettach();
addCartPresenter.dettach();
}
@Override
public void show(DetailsBean detailsBean) {
String images = detailsBean.getData().getImages();
String[] split = images.split("\\|");
Glide.with(this).load(split[0]).into(mIv);
TextPaint paint = mTvBargainPrice.getPaint();
paint.setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
mTvBargainPrice.setText("原價:" + detailsBean.getData().getBargainPrice());
mTvPrice.setText("優惠價:" + detailsBean.getData().getPrice());
}
@Override
public void show(String str) {
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
}
private void initView() {
mIv = (ImageView) findViewById(R.id.iv);
mTvBargainPrice = (TextView) findViewById(R.id.tvBargainPrice);
mTvPrice = (TextView) findViewById(R.id.tvPrice);
mTvCart = (TextView) findViewById(R.id.tvCart);
mTvAddCart = (TextView) findViewById(R.id.tvAddCart);
mTvCart.setOnClickListener(this);
mTvAddCart.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
                break;
case R.id.tvCart:
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
break;
case R.id.tvAddCart:
                addCartPresenter.addCart();
break;
}
    }
}
SecondActivity
public class SecondActivity extends AppCompatActivity implements ISecondListener {
private GetCartPresenter getCartPresenter;
private ExpandableListView mElv;
/**
     * 全選
*/
private CheckBox mCb;
/**
     * 合計:
     */
private TextView mTvTotal;
/**
     * 去結算(0)
     */
private TextView mTvCount;
private ElvAdapter elvAdapter;
private GetCartBean bean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initView();
getCartPresenter = new GetCartPresenter(this);
getCartPresenter.getCart();
mCb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
elvAdapter.AllOrNone(mCb.isChecked());
}
        });
}
@Override
protected void onDestroy() {
super.onDestroy();
getCartPresenter.dettach();
}
@Override
public void show(List<GetCartBean.DataBean> group, List<List<GetCartBean.DataBean.ListBean>> child) {
elvAdapter = new ElvAdapter(this, group, child);
mElv.setGroupIndicator(null);
mElv.setAdapter(elvAdapter);
for (int i = 0; i < group.size(); i++) {
mElv.expandGroup(i);
}
    }
private void initView() {
mElv = (ExpandableListView) findViewById(R.id.elv);
mCb = (CheckBox) findViewById(R.id.cb);
mTvTotal = (TextView) findViewById(R.id.tvTotal);
mTvCount = (TextView) findViewById(R.id.tvCount);
}
public void setPriceAndCount(PriceAndCount priceAndCount) {
mTvTotal.setText("合計:" + priceAndCount.getPrice());
mTvCount.setText("去結算(" + priceAndCount.getCount() + ")");
}
public void setAllChecked(boolean bool) {
mCb.setChecked(bool);
}
}
ElvAdapter
public class ElvAdapter extends BaseExpandableListAdapter {
private Context context;
private List<GetCartBean.DataBean> group;
private List<List<GetCartBean.DataBean.ListBean>> child;
private final LayoutInflater inflater;
//建立大的集合
private List<GetCartBean.DataBean.ListBean> list;
//存放商家的id和商家的名稱的map集合
private Map<String,String> map = new HashMap<>();
public ElvAdapter(Context context, List<GetCartBean.DataBean> group, List<List<GetCartBean.DataBean.ListBean>> child) {
this.context = context;
this.group = group;
this.child = child;
inflater = LayoutInflater.from(context);
}
@Override
public int getGroupCount() {
return