版权声明:本文为博主原创文章,未经博主允许不得转载。 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"; } } }