Android網絡編程之Http請求服務器數據(POST方式)

 Android中的網絡請求主要有GET和POST方式。POST方式比GET方式更爲安全,因爲需要發送的消息不是嵌入在url中的,同時能比GET發送更多的數據。

      本文討論使用POST方式向聚合數據API發送請求,以獲得手機號碼歸屬地的信息。歸屬地查詢的接口的請求示例爲:http://apis.juhe.cn/mobile/get?phone=13429667914&key=您申請的KEY。默認返回的格式爲JSON。最後把返回結果顯示在TextView上。直接上代碼:

[java] view plain copy
 print?
  1. public class MainActivity extends Activity {  
  2.   
  3.     private TextView text;  
  4.     private String url = "http://apis.juhe.cn/mobile/get";//向服務器請求的url.  
  5.     private Handler handler = new Handler();//使用Handler更新UI,因爲網絡操作是在子線程中進行的,子線程不能更新UI,所以只能使用Handler機制;  
  6.   
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         setContentView(R.layout.activity_main);  
  11.         text = (TextView) findViewById(id_text);  
  12.   
  13.         //新建線程Thread,開始網絡操作。  
  14.         new Thread() {  
  15.             @Override  
  16.             public void run() {  
  17.                 try {  
  18.                     URL httpUrl = new URL(url);  
  19.                     HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();//與服務器建立連接;  
  20.                     conn.setReadTimeout(5000);  
  21.                     conn.setRequestMethod("POST");//設置請求方式爲GET  
  22.   
  23.                     String content = "phone=13429667914&key=9719c91bd4ac2647c67c6cd067b5cb8e";//拼接需要發送的內容;以字節的方式寫入到輸出流中;  
  24.                     OutputStream is = conn.getOutputStream();  
  25.                     is.write(content.getBytes());  
  26.   
  27.                     final StringBuffer sb = new StringBuffer();//把獲取的數據不斷存放到StringBuffer中;  
  28.                     BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));//使用reader向輸入流中讀取數據,並不斷存放到StringBuffer中;  
  29.                     String line;  
  30.                     while ((line = reader.readLine()) != null) {//只要還沒有讀取完,就不斷讀取;  
  31.                         sb.append(line);//在StringBuffer中添加;  
  32.                     }  
  33.                     handler.post(new Runnable() {//使用Handler更新UI;當然這裏也可以使用sendMessage();handMessage()來進行操作;  
  34.                         @Override  
  35.                         public void run() {  
  36.                             text.setText(sb.toString());//StringBuffer轉化爲String輸出;  
  37.                         }  
  38.                     });  
  39.                 } catch (MalformedURLException e) {  
  40.                     e.printStackTrace();  
  41.                 } catch (IOException e) {  
  42.                     e.printStackTrace();  
  43.                 }  
  44.             }  
  45.         }.start();  
  46.     }  
  47. }  

運行程序後,服務器返回的結果如圖:

。成功通過post方式獲取服務器數據。


         通過比較GET方式和POST方式,其實兩者是十分類似的。只是POST方式把需要發送的消息單獨抽取出來進行拼接,而不是嵌入到URL中,相對來說更加安全。區別只在於以下4行代碼(把URL中“?”之後的內容抽取出來):

[java] view plain copy
 print?
  1. private String url = "http://apis.juhe.cn/mobile/get";//向服務器請求的url.  
  2.   
  3.   
  4. String content = "phone=13429667914&key=9719c91bd4ac2647c67c6cd067b5cb8e";//拼接需要發送的內容;以字節的方式寫入到輸出流中;  
  5.                   OutputStream is = conn.getOutputStream();  
  6.                   is.write(content.getBytes());  

         這樣就可以方便的進行GET,POST請求了。(對於返回XML格式的就不再贅述了)。


github主頁:https://github.com/chenyufeng1991  。歡迎大家訪問!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章