HttpURLConnection的GET請求POST請求小總結
阿新 • • 發佈:2019-01-09
GET請求程式碼如下:
POST請求是看不到URL裡面的標頭檔案內容的,把標頭檔案內容從連線的輸出流中寫入,這樣相對於GET請求會比較安全些//網路請求是一個耗時操作,要在子執行緒裡面開啟 new Thread(new Runnable() { @Override public void run() { try { //get請求的url URL url=new URL("http://192.168.2.135:8080/web/MyProject?username=zhangsan&password=123"); //url寫法: 協議://IP地址:埠號/訪問的檔案 //協議一般是http,IP地址是要訪問的IP地址,埠一般是8080,然後加上訪問的是什麼 //新建一個HttpURLConnection,從url開啟一個連線 HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //設定請求的模式 connection.setRequestMethod("GET"); //設定請求連線超時時間 connection.setConnectTimeout(5000); //設定訪問時的超時時間 connection.setReadTimeout(5000); //開啟連線 connection.connect(); InputStream inputStream=null; BufferedReader reader=null; //如果應答碼為200的時候,表示成功的請求帶了,這裡的HttpURLConnection.HTTP_OK就是200 if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){ //獲得連線的輸入流 inputStream=connection.getInputStream(); //轉換成一個加強型的buffered流 reader=new BufferedReader(new InputStreamReader(inputStream)); //把讀到的內容賦值給result final String result=reader.readLine(); //子執行緒不能更新UI執行緒的內容,要更新需要開啟一個Ui執行緒,這裡Toast要在Ui執行緒 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show(); } }); } //關閉流和連線 reader.close(); inputStream.close(); connection.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start();
簡單的下載伺服器圖片的程式碼//網路請求是一個耗時操作,要在子執行緒裡面開啟 new Thread(new Runnable() { @Override public void run() { try { //get請求的url URL url=new URL("http://192.168.2.135:8080/web/MyProject"); //url寫法: 協議://IP地址:埠號/訪問的檔案 //協議一般是http,IP地址是要訪問的IP地址,埠一般是8080,然後加上訪問的是什麼 //新建一個HttpURLConnection,從url開啟一個連線 HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //設定請求的模式 connection.setRequestMethod("POST"); //設定請求連線超時時間 connection.setConnectTimeout(5000); //設定訪問時的超時時間 connection.setReadTimeout(5000); //設定連線允許寫入 connection.setDoOutput(true); //設定標頭檔案內容 String data="username=zhangsan&password=123"; //獲得連線的輸出流 OutputStream outputStream = connection.getOutputStream(); //把標頭檔案內容寫入流中 outputStream.write(data.getBytes()); //開啟連線 connection.connect(); InputStream inputStream=null; BufferedReader reader=null; //如果應答碼為200的時候,表示成功的請求帶了,這裡的HttpURLConnection.HTTP_OK就是200 if(connection.getResponseCode()==HttpURLConnection.HTTP_OK){ //獲得連線的輸入流 inputStream=connection.getInputStream(); //轉換成一個加強型的buffered流 reader=new BufferedReader(new InputStreamReader(inputStream)); //把讀到的內容賦值給result final String result=reader.readLine(); //子執行緒不能更新UI執行緒的內容,要更新需要開啟一個Ui執行緒,這裡Toast要在Ui執行緒 runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show(); } }); } //關閉流和連線 reader.close(); inputStream.close(); connection.disconnect(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start();
簡單的下載某個檔案的程式碼new Thread(new Runnable() { @Override public void run() { try { //建立一個url,指定要下載的圖片的url URL url=new URL("http://192.168.2.135:8080/web/aaa.bmp"); //從url開啟連線,下載圖片預設是GET請求 HttpURLConnection connection= (HttpURLConnection) url.openConnection(); //連線 connection.connect(); //如果應答碼是200,代表連線上了 if(connection.getResponseCode()==200){ //從連接獲得輸入流 InputStream inputStream=connection.getInputStream(); //把輸入流轉成bitmap final Bitmap map= BitmapFactory.decodeStream(inputStream); runOnUiThread(new Runnable() { @Override public void run() { //把bitmap設定到控制元件上 imageView.setImageBitmap(map); } }); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start();
//設定一個progressdialog
final ProgressDialog diglog=new ProgressDialog(this);
//設定diglog的樣式
diglog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//設定diglog顯示出來
diglog.show();
new Thread(new Runnable() {
@Override
public void run() {
try {
//要下載檔案的url
URL url=new URL("http://192.168.2.135:8080/web/mymusic.mp3");
//從url開啟連線
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
//獲得檔案的大小
diglog.setMax(connection.getContentLength());
//建立連線
connection.connect();
//設定下載到的地方
final File file=new File(Environment.getExternalStorageDirectory(),"/mymusic.mp3");
if(connection.getResponseCode()==200){
//獲得連線的輸入流
InputStream inputStream=connection.getInputStream();
//新建一個輸出流
FileOutputStream fos=new FileOutputStream(file);
//設定每次讀取的內容
byte[] bytes=new byte[1024];
//設定每次讀取到的內容的長度
int len=-1;
while ((len=inputStream.read(bytes))!=-1){
//把讀到的內容寫入到記憶體裡
fos.write(bytes,0,len);
//設定diglog每次的增長值
diglog.incrementProgressBy(len);
}
//檔案下載完設定進度條隱藏
diglog.dismiss();
//關閉流和連線
fos.close();
inputStream.close();
}
connection.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
最後要提下注意的幾點
子執行緒是一個耗時操作,不能在子執行緒中更新UI
如果要在子執行緒中更新UI,可以開啟一個UI執行緒,或者使用訊息機制
還要在清單配置檔案那邊加上INTERNET許可權
ProgressDiglog是個特殊的控制元件,可以在子執行緒中來dissmiss掉
下載檔案的時候,注意下載了什麼格式的檔案,下載下來要存到SD卡里的檔案就要是什麼格式
如果要下載很多張圖片,用Bitmap會有OutofMemory(記憶體溢位)風險,
這裡可以使用第三方來解決,比如Blide,Imageloader