閱讀197 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android-非常棒的HTTP通訊總結

 

這裏有一個非常棒的http通訊的總結,我看了以後茅塞頓開。

先貼代碼:

01 public class Activity1 extends Activity {
02  
03     private final String DEBUG_TAG = "System.out";
04  
05     private TextView mTextView;
06     private Button mButton;
07  
08     protected void onCreate(Bundle savedInstanceState) {
09         super.onCreate(savedInstanceState);
10         setContentView(R.layout.main);
11  
12         mTextView = (TextView) findViewById(R.id.TextView01);
13         mButton = (Button) findViewById(R.id.Button01);
14         mButton.setOnClickListener(new httpListener());
15     }
16  
17     // 設置按鈕監聽器
18     class httpListener implements OnClickListener {
19         public void onClick(View v) {
20             refresh();
21         }
22     }
23  
24     private void refresh() {
25         String httpUrl = "https://192.168.0.101:8080/Test/test.jsp";
26         // URL可以加參數
27         // String httpUrl =
29         String resultData = "";
30         URL url = null;
31         try {
32             // 創建一個URL對象
33             url = new URL(httpUrl);
34         } catch (MalformedURLException e) {
35             Log.d(DEBUG_TAG, "create URL Exception");
36         }
37         // 聲明HttpURLConnection對象
38         HttpURLConnection urlConn = null;
39         // 聲明InputStreamReader對象
40         InputStreamReader in = null;
41         // 聲明BufferedReader對象
42         BufferedReader buffer = null;
43         String inputLine = null;
44         if (url != null) {
45             try {
46                 // 使用HttpURLConnection打開連接
47                 urlConn = (HttpURLConnection) url.openConnection();
48                 // 得到讀取的內容(流)
49                 in = new InputStreamReader(urlConn.getInputStream());
50                 // 創建BufferReader對象,輸出時候用到
51                 buffer = new BufferedReader(in);
52                 // 使用循環來讀取數據
53                 while ((inputLine = buffer.readLine()) != null) {
54                     // 在每一行後麵加上換行
55                     resultData += inputLine + "\n";
56                 }
57                 // 設置顯示取的的內容
58                 if (resultData != null && !resultData.equals("")) {
59                     mTextView.setText(resultData);
60                 } else {
61                     mTextView.setText("讀取的內容為空");
62                 }
63             } catch (IOException e) {
64                 e.printStackTrace();
65             } finally {
66                 try {
67                     // 關閉InputStreamReader
68                     in.close();
69                     // 關閉URL連接
70                     urlConn.disconnect();
71                 } catch (IOException e) {
72                     e.printStackTrace();
73                 }
74             }
75         } else {
76             Log.d(DEBUG_TAG, "URL is NULL");
77         }
78     }
79 }

 


第二種方式:

001 public class Activity2 extends Activity {
002  
003     private final String DEBUG_TAG = "System.out";
004  
005     private TextView mTextView;
006     private Button mButton;
007  
008     protected void onCreate(Bundle savedInstanceState) {
009         super.onCreate(savedInstanceState);
010         setContentView(R.layout.main);
011  
012         mTextView = (TextView) findViewById(R.id.TextView01);
013         mButton = (Button) findViewById(R.id.Button01);
014         mButton.setOnClickListener(new httpListener());
015     }
016  
017     // 設置按鈕監聽器
018     class httpListener implements OnClickListener {
019         public void onClick(View v) {
020             refresh();
021         }
022     }
023  
024     private void refresh() {
025         String httpUrl = "https://192.168.0.101:8080/Test/test.jsp";
026         String resultData = "";
027         URL url = null;
028         try {
029             // 創建一個URL對象
030             url = new URL(httpUrl);
031         } catch (MalformedURLException e) {
032             Log.d(DEBUG_TAG, "create URL Exception");
033         }
034         // 聲明HttpURLConnection對象
035         HttpURLConnection urlConn = null;
036         // 聲明InputStreamReader對象
037         InputStreamReader in = null;
038         // 聲明BufferedReader對象
039         BufferedReader buffer = null;
040         String inputLine = null;
041         // 聲明DataOutputStream流
042         DataOutputStream out = null;
043         if (url != null) {
044             try {
045                 // 使用HttpURLConnection打開連接
046                 urlConn = (HttpURLConnection) url.openConnection();
047                 // 因為這個是POST請求所以要設置為true
048                 urlConn.setDoInput(true);
049                 urlConn.setDoOutput(true);
050                 // 設置POST方式
051                 urlConn.setRequestMethod("POST");
052                 // POST請求不能設置緩存
053                 urlConn.setUseCaches(false);
054                 urlConn.setInstanceFollowRedirects(false);
055                 // 配置本次連接的Content-type,配置為application/x-www-form-urlencoded的
056                 urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
057                 // 連接,從postUrl.openConnection()至此的配置必須要在connect之前完成
058                 // 要注意的是connectio.getOutputStream會隱含的進行connect
059                 urlConn.connect();
060                 // DataOutputStream流
061                 out = new DataOutputStream(urlConn.getOutputStream());
062                 String content = "par=" + URLEncoder.encode("abcdefg", "gb2312");
063                 // 將要上傳的內容寫入流中
064                 out.writeBytes(content);
065                 // 得到讀取的內容(流)
066                 in = new InputStreamReader(urlConn.getInputStream());
067                 // 創建BufferReader對象,輸出時候用到
068                 buffer = new BufferedReader(in);
069                 // 使用循環來讀取數據
070                 while ((inputLine = buffer.readLine()) != null) {
071                     // 在每一行後麵加上換行
072                     resultData += inputLine + "\n";
073                 }
074                 // 設置顯示取的的內容
075                 if (resultData != null && !resultData.equals("")) {
076                     mTextView.setText(resultData);
077                 } else {
078                     mTextView.setText("讀取的內容為空");
079                 }
080             } catch (IOException e) {
081                 e.printStackTrace();
082             } finally {
083                 try {
084                     // 刷新DataOutputStream流
085                     out.flush();
086                     // 關閉DataOutputStream流
087                     out.close();
088                     // 關閉InputStreamReader
089                     in.close();
090                     // 關閉URL連接
091                     urlConn.disconnect();
092                 } catch (IOException e) {
093                     e.printStackTrace();
094                 }
095             }
096         } else {
097             Log.d(DEBUG_TAG, "URL is NULL");
098         }
099     }
100 }

 

第三種方式

01 public class Activity3 extends Activity{
02     private TextView mTextView;
03     private Button mButton;
04  
05     protected void onCreate(Bundle savedInstanceState) {
06         super.onCreate(savedInstanceState);
07         setContentView(R.layout.main);
08         mTextView = (TextView) findViewById(R.id.TextView01);
09         mButton = (Button) findViewById(R.id.Button01);
10         mButton.setOnClickListener(new httpListener());
11     }
12  
13     // 設置按鈕監聽器
14     class httpListener implements OnClickListener {
15         public void onClick(View v) {
16             String httpUrl = "https://192.168.0.101:8080/Test/test.jsp?par=HttpClient_android_Get";
17             // HttpGet連接對象
18             HttpGet httpRequest = new HttpGet(httpUrl);
19             try {
20                 // 取的HttpClient對象
21                 HttpClient httpclient = new DefaultHttpClient();
22                 // 請求HttpClient,取的HttpResponse
23                 HttpResponse httpResponse = httpclient.execute(httpRequest);
24                 // 請求成功
25                 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
26                     // 取的返回的字符串
27                     String strResult = EntityUtils.toString(httpResponse.getEntity());
28                     // 這個返回值可能會在行尾出現小方格
29                     // 在TextView要顯示的文字過濾掉回車符("\r")就可以正常顯示了。
30                     String strsResult = strResult.replace("\r", "");
31                     mTextView.setText(strsResult);
32                 } else {
33                     mTextView.setText("請求錯誤");
34                 }
35             } catch (ClientProtocolException e) {
36                 mTextView.setText(e.getMessage().toString());
37             } catch (IOException e) {
38                 mTextView.setText(e.getMessage().toString());
39             } catch (Exception e) {
40                 mTextView.setText(e.getMessage().toString());
41             }
42         }
43     }
44 }

 

第四種方式

01 public class Activity4 extends Activity{
02     private TextView mTextView;
03     private Button mButton;
04  
05     protected void onCreate(Bundle savedInstanceState) {
06         super.onCreate(savedInstanceState);
07         setContentView(R.layout.main);
08         mTextView = (TextView) findViewById(R.id.TextView01);
09         mButton = (Button) findViewById(R.id.Button01);
10         mButton.setOnClickListener(new httpListener());
11     }
12  
13     // 設置按鈕監聽器
14     class httpListener implements OnClickListener {
15         public void onClick(View arg0) {
16             String httpUrl = "https://192.168.0.101:8080/Test/test.jsp";
17             // 創建HttpPost連接對象
18             HttpPost httpRequest = new HttpPost(httpUrl);
19             // 使用NameValuePair來保存要傳遞的Post參數
20             List params = new ArrayList();
21             // 添加要傳遞的參數
22             params.add(new BasicNameValuePair("par","HttpClient_android_Post"));
23             try {
24                 // 設置字符集
25                 HttpEntity httpentity = new UrlEncodedFormEntity(params,"gb2312");
26                 // 請求httpRequest
27                 httpRequest.setEntity(httpentity);
28                 // 取的默認的HttpClient
29                 HttpClient httpclient = new DefaultHttpClient();
30                 // 取的HttpResponse
31                 HttpResponse httpResponse = httpclient.execute(httpRequest);
32                 // HttpStatus.SC_OK表示連接成功
33                 if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
34                     // 取的返回的字符串
35                     String strResult = EntityUtils.toString(httpResponse.getEntity());
36                     // 這個返回值可能會在行尾出現小方格
37                     // 在TextView要顯示的文字過濾掉回車符("\r")就可以正常顯示了。
38                     String strsResult = strResult.replace("\r", "");
39                     mTextView.setText(strsResult);
40                 } else {
41                     mTextView.setText("請求錯誤");
42                 }
43             } catch (ClientProtocolException e) {
44                 mTextView.setText(e.getMessage().toString());
45             } catch (IOException e) {
46                 mTextView.setText(e.getMessage().toString());
47             } catch (Exception e) {
48                 mTextView.setText(e.getMessage().toString());
49             }
50         }
51     }
52 }

我把它寫到一個項目的4個Activity中了

有需要的下載源碼看吧

勐擊下載源碼

最後更新:2017-04-02 06:51:59

  上一篇:go 創新源於模仿之五:做一個自己的QuickAction
  下一篇:go 創新源於模仿之四:增強的ExpandableListView