android 异步 post请求 与 同步post请求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl406707/article/details/77483110

本文是将 通过AES加密后的数据   上传至后台      请求下来的数据经过 AES解    :  AES解密内容   详见  http://blog.csdn.net/zl406707/article/details/77369310


使用过AsyncTask 的同学都知道一个异步加载数据最少要重写以下这两个方法:

  • doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
  • onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回

异步post请求“

class PaymentSubmit extends AsyncTask<Void,Integer,String> {

    //进度条
    @Override
    protected void onPreExecute() {

        if(busongnum == 0){
            pd = ProgressDialog.show(SaleActivity.this,"温馨提示","正在提交信息...");
        }else{
            pd = ProgressDialog.show(SaleActivity.this,"温馨提示","正在补送...");
        }
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(Void... params) {
        JSONObject jsonobj=new JSONObject();//组json数据
        try {
            jsonobj.put("MemberID",num);
            jsonobj.put("TransAmt",amt);
            jsonobj.put("TransNo",salenum);
            jsonobj.put("TransDate",ymd);
	    jsonobj.put("Deposit","12");
            
            jsonobj.put("PayType","");//支付途径
            jsonobj.put("BarCode","");//条形码
            jsonobj.put("BankSerialNo",traceno);//流水号
            jsonobj.put("Source","07");//来源
            String senddata=String .valueOf(jsonobj);//上传的明文
            if(BuildConfig.LOG){
                Log.d("zl","提交信息上传的明文:"+senddata);
            }
            String jiamidata="="+ AES128utils.jiaMi(senddata,key,iv);//数据加密
            if(BuildConfig.LOG){
                Log.d("zl","加密后上传的提交信息密文:"+jiamidata);
            }
            recvdata= HttpUtils.postGetJson(getString(R.string.PayMentUrl),jiamidata);
        } catch (Exception e) {
            ToastUtil.showToast(SaleActivity.this,"数据格式错");
            pd.cancel();
            e.printStackTrace();
        }
        return recvdata;
    }

    @Override
    protected void onPostExecute(String s) {   protected String doInBackground
        if (s != null && !s.equals("")) {
            String s1 = s.replaceAll("\n", "");//去掉最后的换行\n
            String newStr = s1.replaceAll("\"", "");//去掉所有的"
            String jiemi = AES128utils.jieMi(newStr, key, iv);
            if (BuildConfig.LOG) {
                Log.d("zl", "提交信息解密后的i" + jiemi);
            }
            if (jiemi != null && !jiemi.equals("")) {

                try {
                    JSONObject jsb=new JSONObject(jiemi);
                    if(jsb.has("Result")){//判断返回码 1 成功 -1失败
                        String result=jsb.getString("Result");
                        if(result.equals("1")){
                            if(jsb.has("ResultDesc")){//信息描述
                                String resultdesc=jsb.getString("ResultDesc");
                                ToastUtil.showToast(SaleActivity.this,resultdesc);
                            }
                            //提交成功
                            Message msg=new Message();
                            msg.obj=0;
                            handler.sendMessage(msg);
                            pd.cancel();
                        }else{
                            if(jsb.has("ResultDesc")){
                                String resultdesc=jsb.getString("ResultDesc");
                                ToastUtil.showToast(SaleActivity.this,resultdesc);
                                Message msg=new Message();
                                msg.obj=1;
                                handler.sendMessage(msg);
                                pd.cancel();
                            }else{
                                ToastUtil.showToast(SaleActivity.this,"返回的信息描述数据为空");
                                Message msg=new Message();
                                msg.obj=1;
                                handler.sendMessage(msg);
                                pd.cancel();
                            }
                        }
                    }
                } catch (JSONException e) {
                    ToastUtil.showToast(SaleActivity.this,"数据错误");
                    Message msg=new Message();
                    msg.obj=1;
                    handler.sendMessage(msg);
                    pd.cancel();
                    e.printStackTrace();
                }

            }else{
                ToastUtil.showToast(SaleActivity.this,"数据错误");
                Message msg=new Message();
                msg.obj=1;
                handler.sendMessage(msg);
                pd.cancel();
                pd.cancel();
            }
            super.onPostExecute(s);
        }
    }
}






同步post请求  工具类

public class HttpUtils {

    public static String postGetJson(String url, String content) {
        try {
            URL mUrl = new URL(url);
            HttpURLConnection mHttpURLConnection = (HttpURLConnection) mUrl.openConnection();
            //设置链接超时时间
            mHttpURLConnection.setConnectTimeout(5000);
            //设置读取超时时间
            mHttpURLConnection.setReadTimeout(5000);
            //设置请求参数
            mHttpURLConnection.setRequestMethod("POST");
            //添加Header
            mHttpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            //接收输入流
            mHttpURLConnection.setDoInput(true);
            //传递参数时需要开启
            mHttpURLConnection.setDoOutput(true);
            //Post方式不能缓存,需手动设置为false
            mHttpURLConnection.setUseCaches(false);

            mHttpURLConnection.connect();

            DataOutputStream dos = new DataOutputStream(mHttpURLConnection.getOutputStream());

            String postContent = content;

            dos.write(postContent.getBytes());
            dos.flush();
            // 执行完dos.close()后,POST请求结束
            dos.close();
            // 获取代码返回值
            int respondCode = mHttpURLConnection.getResponseCode();
            if(BuildConfig.LOG){
                Log.d("respondCode","respondCode="+respondCode );
            }
            // 获取返回内容类型
            String type = mHttpURLConnection.getContentType();
            if(BuildConfig.LOG){
                Log.d("type", "type="+type);
            }

            // 获取返回内容的字符编码
            String encoding = mHttpURLConnection.getContentEncoding();
            if(BuildConfig.LOG){

            }
            // 获取返回内容长度,单位字节
            int length = mHttpURLConnection.getContentLength();
            if(BuildConfig.LOG){
                Log.d("length", "length=" + length);
            }

//            // 获取头信息的Key
//            String key = mHttpURLConnection.getHeaderField(idx);
//            Log.d("key", "key="+key);
            // 获取完整的头信息Map
            // Map<String, String="">> map = mHttpURLConnection.getHeaderFields();
            if (respondCode == 200) {
                // 获取响应的输入流对象
                InputStream is = mHttpURLConnection.getInputStream();
                // 创建字节输出流对象
                ByteArrayOutputStream message = new ByteArrayOutputStream();
                // 定义读取的长度
                int len = 0;
                // 定义缓冲区
                byte buffer[] = new byte[1024];
                // 按照缓冲区的大小,循环读取
                while ((len = is.read(buffer)) != -1) {
                    // 根据读取的长度写入到os对象中
                    message.write(buffer, 0, len);
                }
                // 释放资源
                is.close();
                message.close();
                // 返回字符串
                String msg = new String(message.toByteArray());
                if(BuildConfig.LOG){
                    Log.d("Common", msg);
                }

                return msg;
            }
            return "fail";
        }catch(Exception e){
            return "error";
        }
    }

}

猜你喜欢

转载自blog.csdn.net/zl406707/article/details/77483110