购物车

package com.wpl.xiangmu.yunifang.frgament;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.alipay.sdk.app.PayTask;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.wpl.xiangmu.yunifang.R;
import com.wpl.xiangmu.yunifang.activity.GoodsActivity;
import com.wpl.xiangmu.yunifang.bean.MyGoodsBean;
import com.wpl.xiangmu.yunifang.dao.MySqlite;
import com.wpl.xiangmu.yunifang.utils.GetIntent;
import com.wpl.xiangmu.yunifang.utils.MyInit;

import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Random;

import domain.PayResult;
import util.SignUtils;

public class ShopingFragment extends Fragment implements View.OnClickListener {
    private View v;
    private TextView editor;
    private Button jiesuan;
    private CheckBox check_all;
    private List<MyGoodsBean> mlist;
    private ListView listview;
    private int count = 0;   //购买的数量
    private TextView mPriceAll;
    private TextView prices;
    private boolean once = true;
    private MyBuyListAdapter adapter;
    private double totalPrice = 0; // 商品总价
    // Pid 商户在支付宝的id
    public static final String PARTNER = "2088901305856832";

    // 商户收款账号
    public static final String SELLER = "8@qdbaiu.com";

    // 商户私钥,pkcs8格式
    public static final String RSA_PRIVATE = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAM/KCxg/OIj6er2GEig0DOkHqBSzEPHGigMbTXP1k2nrxEHeE59xOOuyovQH/A1LgbuVKyOac3uAN4GXIBEoozRVzDhu5dobeNm48BPcpYSAfvN3K/5GLacvJeENqsiBx8KufM/9inlHaDRQV7WhX1Oe2ckat1EkdHwxxQgc36NhAgMBAAECgYEAwn3sWpq6cUR65LD8h9MIjopTImTlpFjgz72bhsHDZK6A+eJDXcddrwh7DI34t/0IBqu+QEoOc/f0fIEXS9hMwTvFY59XG7M8M6SdeaAbemrGmZ1IdD6YDmpbQFHn2ishaYF0YDZIkBS3WLDFrtk/efaarBCpGAVXeEiVQE4LewECQQD5W1rpkq+dHDRzzdtdi1bJ479wun5CfmVDVb2CJH7Iz0t8zyp/iEVV2QELnxZMphmoSzKaLXutTTj2OImpzCtRAkEA1VMxG6nQq9NkU51H1+I3mlUXRZ0XeFA1GFJ7xWpNRAVhEWlDz2zy9v/gX+RFpNC3f5uznycas70Xp78ew43TEQJAZFFqi9mlqTF1sLk67bFnIyXrGPEOZrXvC13tNfR0xVkQZ4/46wHp0xXQo9pG4GNaoyhNnVV7EkelCPnJ+HPZYQJAQh6T9QgQZoGR8hyovPAf3dUL7oa/VIo/urcuJ8VIB5JHQNdIrk0NjaNHj1E4iNosVgATj3vWWel9IIArb99QkQJAKvfm78lwnImtg5IM604hdn/Wu1XF8tpxsKLWcnfchMr0bM9rCmKmhAY+wdmqSyPZRiNb1QaaaDTqJxLy6AnQ+Q==";

    private static final int SDK_PAY_FLAG = 1;

    private Handler mHandler = new Handler() {
        @SuppressWarnings("unused")
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case SDK_PAY_FLAG: {
                    PayResult payResult = new PayResult((String) msg.obj);
                    /**
                     * 同步返回的结果必须放置到服务端进行验证(验证的规则请看https://doc.open.alipay.com/doc2/
                     * detail.htm?spm=0.0.0.0.xdvAU6&treeId=59&articleId=103665&
                     * docType=1) 建议商户依赖异步通知
                     */
                    String resultInfo = payResult.getResult();// 同步返回需要验证的信息

                    String resultStatus = payResult.getResultStatus();
                    // 判断resultStatus 为“9000”则代表支付成功,具体状态码代表含义可参考接口文档
                    if (TextUtils.equals(resultStatus, "9000")) {
                        Toast.makeText(getActivity(), "支付成功", Toast.LENGTH_SHORT).show();
                    } else {
                        // 判断resultStatus 为非"9000"则代表可能支付失败
                        // "8000"代表支付结果因为支付渠道原因或者系统原因还在等待支付结果确认,最终交易是否成功以服务端异步通知为准(小概率状态)
                        if (TextUtils.equals(resultStatus, "8000")) {
                            Toast.makeText(getActivity(), "支付结果确认中", Toast.LENGTH_SHORT).show();

                        } else {
                            // 其他值就可以判断为支付失败,包括用户主动取消支付,或者系统返回的错误
                            Toast.makeText(getActivity(), "支付失败", Toast.LENGTH_SHORT).show();
                        }
                    }
                    break;
                }
                default:
                    break;
            }
        }

    };
    private MySqlite sqlite;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        v = inflater.inflate(R.layout.gouwuche, null);
        return v;
    }

    @Override
    public void onStart() {
        super.onStart();
        //判断网络
        boolean is = GetIntent.GetInfo(getActivity());
        if (is) {
            //查询数据库
            seletInfo();
        } else {
            Toast.makeText(getActivity(), "没有网路连接", Toast.LENGTH_LONG).show();
        }

    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);

        // 获取控件
        initview();
    }

    /**
     * // 获取控件
     */
    private void initview() {
        editor = (TextView) v.findViewById(R.id.bianji);
        //编辑的点击事件
        editor.setOnClickListener(this);
        mPriceAll = (TextView) v.findViewById(R.id.money);
        jiesuan = (Button) v.findViewById(R.id.jiesuan);
        //结算的点击事件
        jiesuan.setOnClickListener(this);
        check_all = (CheckBox) v.findViewById(R.id.check_all);
        listview = (ListView) v.findViewById(R.id.gouwuche_list);
        listview.setEnabled(false);
    }

    /**
     * 查询数据库
     */
    private void seletInfo() {
        //实例化数据库
        sqlite = new MySqlite(getActivity());
        //查询数据
        mlist = sqlite.Select();

        //判断
        if (!mlist.isEmpty()) {
            Log.d("-----------", mlist.toString());
            //listview的适配器
            adapter = new MyBuyListAdapter();
            //全选的点击事件
            check_all.setOnClickListener(this);
            //适配器
            listview.setAdapter(adapter);

            //点击事件
            listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Intent intent = new Intent(getActivity(), GoodsActivity.class);
                    intent.putExtra("id", mlist.get(position - 1).uid);
                    startActivity(intent);
                }
            });
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.bianji:
                if (once) {
                    once = false;
                    editor.setText("完成");
                    jiesuan.setText("删除");
                    mPriceAll.setText("");

                    //删除的点击事件
                    jiesuan.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (jiesuan.getText().equals("删除")) {
                                Iterator it = mlist.iterator();
                                while (it.hasNext()) {
                                    MyGoodsBean b = (MyGoodsBean) it.next();
                                    if (b.isChoose()) {
                                        it.remove();
                                        sqlite.Delete(b.uid);
                                        adapter.notifyDataSetChanged();
                                    }
                                }
                            }
                        }
                    });
                } else {
                    once = true;
                    editor.setText("编辑");
                    jiesuan.setText("结算");
                }
                break;
            case R.id.check_all:
                totalPrice = 0;
                if (check_all.isChecked()) {
                    for (int i = 0; i < mlist.size(); i++) {
                        mlist.get(i).setChoose(true);
                        // 如果为选中
                        if (mlist.get(i).isChoose()) {
                            //                            totalPrice = totalPrice +
                            //                            Double.parseDouble(mlist.get(i).price);
                            BigDecimal p = getPriceplus(totalPrice + "", mlist.get(i).price);
                            totalPrice = p.doubleValue();
                        }
                    }
                    //                    // 刷新
                    //                    adapter.notifyDataSetChanged();
                    //                    // 显示
                    //                    mPriceAll.setText(totalPrice + "元");
                } else {
                    for (int i = 0; i < mlist.size(); i++) {
                        mlist.get(i).setChoose(false);
                    }
                }
                mPriceAll.setText(totalPrice + "元");
                // 刷新
                adapter.notifyDataSetChanged();
                break;

            case R.id.jiesuan:
                jisuan();
                break;
        }
    }

    /**
     * 结算
     */
    private void jisuan() {
        if (TextUtils.isEmpty(PARTNER) || TextUtils.isEmpty(RSA_PRIVATE) || TextUtils.isEmpty(SELLER)) {
            new AlertDialog.Builder(getActivity()).setTitle("警告").setMessage("需要配置PARTNER | RSA_PRIVATE| SELLER")
                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialoginterface, int i) {
                            //
                            getActivity().finish();
                        }
                    }).show();
            return;
        }

        String orderInfo = getOrderInfo("测试的商品", "该测试商品的详细描述", "0.01");

        /**
         * 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥泄露在代码中!
         */
        String sign = sign(orderInfo);
        try {
            /**
             * 仅需对sign 做URL编码
             */
            sign = URLEncoder.encode(sign, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        /**
         * 完整的符合支付宝参数规范的订单信息
         */
        final String payInfo = orderInfo + "&sign=\"" + sign + "\"&" + getSignType();

        Runnable payRunnable = new Runnable() {

            @Override
            public void run() {
                // 构造PayTask 对象
                PayTask alipay = new PayTask(getActivity());
                // 调用支付接口,获取支付结果
                String result = alipay.pay(payInfo, true);

                Message msg = new Message();
                msg.what = SDK_PAY_FLAG;
                msg.obj = result;
                mHandler.sendMessage(msg);
            }
        };

        // 必须异步调用
        Thread payThread = new Thread(payRunnable);
        payThread.start();
    }

    /**
     * create the order info. 创建订单信息
     */
    private String getOrderInfo(String subject, String body, String price) {

        // 签约合作者身份ID
        String orderInfo = "partner=" + "\"" + PARTNER + "\"";

        // 签约卖家支付宝账号
        orderInfo += "&seller_id=" + "\"" + SELLER + "\"";

        // 商户网站唯一订单号--------------------------拿到提交订单返回的数据
        orderInfo += "&out_trade_no=" + "\"" + getOutTradeNo() + "\"";// -----------传

        // 商品名称
        orderInfo += "&subject=" + "\"" + subject + "\"";

        // 商品详情
        orderInfo += "&body=" + "\"" + body + "\"";

        // 商品金额
        orderInfo += "&total_fee=" + "\"" + price + "\"";

        // 服务器异步通知页面路径-------商户服务器
        orderInfo += "&notify_url=" + "\"" + "http://notify.msp.hk/notify.htm" + "\"";

        // 服务接口名称, 固定值
        orderInfo += "&service=\"mobile.securitypay.pay\"";

        // 支付类型, 固定值
        orderInfo += "&payment_type=\"1\"";

        // 参数编码, 固定值
        orderInfo += "&_input_charset=\"utf-8\"";

        // 设置未付款交易的超时时间
        // 默认30分钟,一旦超时,该笔交易就会自动被关闭。
        // 取值范围:1m~15d。
        // m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
        // 该参数数值不接受小数点,如1.5h,可转换为90m。
        orderInfo += "&it_b_pay=\"30m\"";

        // extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
        // orderInfo += "&extern_token=" + "\"" + extern_token + "\"";

        // 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
        orderInfo += "&return_url=\"m.alipay.com\"";

        // 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)
        // orderInfo += "&paymethod=\"expressGateway\"";

        return orderInfo;
    }

    /**
     * sign the order info. 对订单信息进行签名
     *
     * @param content 待签名订单信息
     */
    private String sign(String content) {
        return SignUtils.sign(content, RSA_PRIVATE);
    }

    /**
     * get the sign type we use. 获取签名方式
     */
    private String getSignType() {
        return "sign_type=\"RSA\"";
    }

    /**
     * get the out_trade_no for an order. 生成商户订单号,该值在商户端应保持唯一(可自定义格式规范)
     */
    private String getOutTradeNo() {
        SimpleDateFormat format = new SimpleDateFormat("MMddHHmmss", Locale.getDefault());
        Date date = new Date();
        String key = format.format(date);

        Random r = new Random();
        key = key + r.nextInt();
        key = key.substring(0, 15);
        return key;
    }

    /**
     * 适配器
     */
    public class MyBuyListAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return mlist.size();
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                //视图
                convertView = View.inflate(getActivity(), R.layout.gouwuche_list_item, null);
            }
            ImageView img = (ImageView) convertView.findViewById(R.id.goods_img);
            TextView name = (TextView) convertView.findViewById(R.id.shop_name);
            prices = (TextView) convertView.findViewById(R.id.shop_money);
            TextView num = (TextView) convertView.findViewById(R.id.textView6);
            //单选框
            final CheckBox cb = (CheckBox) convertView.findViewById(R.id.ch_img);
            final MyGoodsBean bean = mlist.get(position);
            //赋值
            ImageLoader.getInstance().displayImage(bean.imgurl, img, MyInit.options());
            name.setText(bean.name);
            prices.setText(bean.price + "");
            num.setText(bean.num + "");


            // 将CheckBox的选中状况记录下来
            //            bean.setChoose(cb.isChecked());

            //            cb.setChecked(cb.isChecked());
            cb.setChecked(bean.isChoose());
            cb.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String p = bean.price;
                    // 调整选定条目
                    if (cb.isChecked()) {
                        // totalPrice += Double.parseDouble(p);
                        bean.setChoose(true);

                        BigDecimal plus = getPriceplus(totalPrice + "", p + "");
                        totalPrice = plus.doubleValue();
                    } else {
                        //                        totalPrice -=  Double.parseDouble(p);
                        bean.setChoose(false);
                        BigDecimal price = getPrice(totalPrice + "", p + "");
                        totalPrice = price.doubleValue();
                    }
                    mPriceAll.setText(totalPrice + "");
                    //  count();
                    select();

                    notifyDataSetChanged();
                }
            });


            return convertView;
        }
    }

    public BigDecimal getPrice(String nowPrice, String lastPrice) {
        return new BigDecimal(nowPrice).subtract(new BigDecimal(lastPrice));
    }

    public BigDecimal getPriceplus(String nowPrice, String lastPrice) {
        return new BigDecimal(nowPrice).add(new BigDecimal(lastPrice));
    }

    public void select() {
        int count = 0;
        for (int i = 0; i < mlist.size(); i++) {
            if (mlist.get(i).isChoose()) {
                count++;
            }
        }
        if (count == mlist.size()) {
            check_all.setChecked(true);
        } else {
            check_all.setChecked(false);
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值