Android以請求參數來獲取網絡數據

【聲明】此文轉載自:http://blog.sina.com.cn/s/blog_703074da0101dqaq.html

——尊重作者,知識無價,交流無限!


取網絡數據主要靠發交易(或者說請求,接口等),而這些交易由java中的網絡通信,HttpURLConnection和HttpClient實現,以下是具體例子。


大家都知道,網絡通信,發送請求有兩種方式,GET和POST,這裏也不例外。

1.HttpURLConnection的GET方式獲取網絡數據,get方式將參數放在url後一起傳遞過去,而且會被看到,一般不太安全,但是get方式只獲取數據,不會更新數據。
步驟:
(1).建立URL,URL url=new URL(urltmp); //urltmp=http://96.0.57.141:8080/pmobile/NoticeInfoListQry.do?NoteType=1

(2)使用URL建立連接,HttpURLConnection urlcon=url.openConnection()
(3)連接,並獲取數據流 
 InputStreamReader reader=new InputStreamReader(urlcon.getInputStream());
 
(4)使用IO流處理數據,這裏以BufferedReader爲例
 BufferedReader bf=new BufferedReader(reader);

代碼示例:
android—獲取網絡數據


2.使用POST方式獲取數據,post方式參數是放在請求的內容裏面上送的,而不是放在url裏面,相對安全一點,但是post有更新的操作,一般form表單提交的數據都是採用的post方式

步驟:
(1)建立URL,跟get方式一樣 URL url=new URL(xxxxx);
(2)建立連接,HttpURLConnection urlcon=url.openConnection();
(3)配置屬性,這裏是最大的區別
urlcon.setDoOutput(true); //不設置dooutput屬性,無法在內容上送數據
urlcon.setDoInput(true); //這個doinput屬性可以不設置,默認是true
urlcon.setRequestMethod("POST"); //不設置這個方式也能拿到數據,並且注意POST要全大寫
urlcon.setUseCaches(false);//post方式不能使用緩存,安全問題?
urlcon.setInstanceFollowRedirects(true);//

//如果不設置這個屬性,那麼上送的參數是對象時,有可能拋出異常
urlcon.setRequestProperty("Content-type","application/x-java-serialized-object");
urlcon.connect();  //連接必須在上面之後,也可以沒有,因爲調用OutputStream時默認連接一次

(4)使用DataOutputStream講參數寫入到上送的內容中
DataOutputStream data=new DataOutputStream(urlcon.getOutputStream());
String param="NoteType=1";
data.writeBytes(param);
data.flush();
data.close();

(5)獲取數據流,跟get方式一樣
InputStreamReader reader=new InputStreamReader(urlcon.getInputStream());

(6)處理數據
BufferedReader bf=new BufferedReader(reader);

代碼如下:
android—獲取網絡數據


3.使用HttpClient的get方法獲取數據,一樣將參數放在url後面上送
步驟:
(1).創建get請求,HttpGet request=new HttpGet(xxx);
(2).創建HttpClient對象,HttpClient clinet=new DefaultHttpClien();
(3).調用client的execute方法,獲取返回數據,HttpResponse response=client.execute(request);
(4).獲取數據, String res=EntityUtils.toString(response.getEntity());

代碼如下:
android—獲取網絡數據

4.使用HttpClient的post方式獲取數據,參數是放在請求的內容中
(1).new一個HttpPost對象,HttpPost request=new HttpPost(xxx);
(2).創建參數鍵值對,只能使用規定格式NameValuePair,List param=new ArrayList();
(3).添加參數,param.add(new BasicNameValuePair("xxx",xxxx));
(4).將參數轉換格式,HttpEntity entity=new UrlEncodeFormEntity(param,"UTF-8");
(5).將參數放到請求中,request.setEntity(entity);
(6).創建HttpClient,HttpClient client=new DefaultHttpClient();
(7).執行連接,獲取返回內容,HttpResponse response=client.execute(request);
(8).獲取數據,String res=EntityUtils.toString(response.getEntity());

android—獲取網絡數據


注意:使用HttpURLConnection,只用調用java自身的jar包中的net方法,而使用HttpClient,要引入apache的jar包,調用裏面的方法,不過這個是經過封裝的,效率更高。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆轉載請註明出處☞指尖飛落的博客☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

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