package www.tydic.com.util; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Map; /** * */ public class HttpUtils { /* * Function : 發送Post請求到服務器 * Param : params請求體內容,encode編碼格式 */ public static String submitPostData(String strUrlPath,String params, String encode) { byte[] data = params.getBytes(); try { URL url = new URL(strUrlPath); HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setConnectTimeout(3000); //設置鏈接超時時間 httpURLConnection.setDoInput(true); //打開輸入流,以便從服務器獲取數據 httpURLConnection.setDoOutput(true); //打開輸出流,以便向服務器提交數據 httpURLConnection.setRequestMethod("POST"); //設置以Post方式提交數據 httpURLConnection.setUseCaches(false); //使用Post方式不能使用緩存 httpURLConnection.setInstanceFollowRedirects(true); //設置請求體的類型是文本類型 httpURLConnection.setRequestProperty("Content-Type", "application/json"); httpURLConnection.connect(); httpURLConnection.setConnectTimeout(10000); DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream()); dataOutputStream.write(params.getBytes()); dataOutputStream.flush(); //得到輸出流,向服務器寫入數據 OutputStream outputStream = httpURLConnection.getOutputStream(); outputStream.write(data); int response = httpURLConnection.getResponseCode(); //得到服務器的響應碼 if(response == HttpURLConnection.HTTP_OK) { InputStream inptStream = httpURLConnection.getInputStream(); System.out.println("=================返回數據======================"); String resutStr = dealResponseResult(inptStream); String decresultStr = DesEncryptUtil.decrypt(resutStr); return decresultStr; //處理服務器的響應結果 } } catch (IOException e) { e.printStackTrace(); } return ""; } /* * Function : 封裝請求體信息 * Param : params請求體內容,encode編碼格式 */ public static StringBuffer getRequestData(Map<String, String> params, String encode) { StringBuffer stringBuffer = new StringBuffer(); //存儲封裝好的請求體信息 try { for(Map.Entry<String, String> entry : params.entrySet()) { stringBuffer.append(entry.getKey()) .append("=") .append(URLEncoder.encode(entry.getValue(), encode)) .append("&"); } stringBuffer.deleteCharAt(stringBuffer.length() - 1); //刪除最後的一個"&" } catch (Exception e) { e.printStackTrace(); } return stringBuffer; } /* * Function : 處理服務器的響應結果(將輸入流轉化成字符串) * Param : inputStream服務器的響應輸入流 */ public static String dealResponseResult(InputStream inputStream) { String resultData = null; //存儲處理結果 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); byte[] data = new byte[1024]; int len = 0; try { while((len = inputStream.read(data)) != -1) { byteArrayOutputStream.write(data, 0, len); } } catch (IOException e) { e.printStackTrace(); } resultData = new String(byteArrayOutputStream.toByteArray()); return resultData; } }
在項目裏如何使用:java
// TODO: http request. String account = loginAccount.getText().toString().trim(); String password = loginPassword.getText().toString().trim(); Map<String, String> paramsMap = new HashMap<String, String>(); paramsMap.put("login_nbr", account); paramsMap.put("login_type", Constant.LOGIN_TYPE); paramsMap.put("pwd", password); Gson gson = new Gson(); String all = gson.toJson(paramsMap); all = DesEncryptUtil.encrypt(all); String resultData = HttpUtils.submitPostData(Constant.APP_PAHT_LOGIN, all, "UTF-8"); if (resultData==""){ resultData=""; } Message msg = new Message(); Bundle datas = new Bundle(); datas.putString("value", resultData); datas.putString("account", account); datas.putString("password", password); msg.setData(datas); handler.sendMessage(msg);
這樣就能夠直接獲取數據了。對resultData數據如何處理以下:json
能夠使用Gson處理,我使用的Java的JSONObject處理工具緩存
方法以下:服務器
Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); Bundle data = msg.getData(); String val = data.getString("value"); String account = data.getString("account"); String password = data.getString("password"); if ("".equals(val)||val.equals(null)){ Toast.makeText(MainActivity.this,"網絡連接錯誤,請重試",Toast.LENGTH_SHORT).show(); return; } JSONObject resultJson = JSONObject.fromObject(val); String resultCode = resultJson.get("CODE").toString(); if (resultCode.equals(Constant.RESULT_CODE)){ String CUST_NAME = resultJson.get("CUST_NAME").toString(); String RESULT = resultJson.get("RESULT").toString(); String CUST_ID = resultJson.get("CUST_ID").toString(); String ORG_CODE = resultJson.get("ORG_CODE").toString(); String ORG_ID = resultJson.get("ORG_ID").toString(); /** * SharedPreferences保存數據 */ SharedPreferencesUtils.put(MainActivity.this,"account",account); SharedPreferencesUtils.put(MainActivity.this,"password",password); SharedPreferencesUtils.put(MainActivity.this,"CUST_NAME",CUST_NAME); SharedPreferencesUtils.put(MainActivity.this,"RESULT",RESULT); SharedPreferencesUtils.put(MainActivity.this,"CUST_ID",CUST_ID); SharedPreferencesUtils.put(MainActivity.this,"ORG_CODE",ORG_CODE); SharedPreferencesUtils.put(MainActivity.this,"ORG_ID",ORG_ID); /** * 登陸數據存儲完畢,進行界面跳轉 */ Intent it = new Intent(MainActivity.this,MainBusinessActivity.class); startActivity(it); finish(); }else { Toast.makeText(MainActivity.this,"帳號或密碼錯誤,請重試",Toast.LENGTH_SHORT).show(); } Log.i("ssssss","請求結果:" + resultJson.toString()); } };