標籤:基本 int handle baidu .so apple 日常 補充 size
在日常的編寫Android軟體的過程中,避免不了使用網路請求,也不可能使用單機的Android,所以本次講的是通過Android發送網路請求請求圖片的文章。
我先來總結一下網路請求的幾個步驟:
1、將想要請求的圖片地址轉換成URL類
2、通過openConnection來建立串連
3、在編程的時候我避免讓使用者死等,設定網路連接的逾時時間,讀取時間
4、佈建要求網路的類型(GET或者POST)
5、提交網路請求
6、接受返回碼,通過返回碼判斷網路是否請求成功
注意:這裡非常重要,任何網路請求必須加上網路許可權 <uses-permission android:name="android.permission.INTERNET"/>
這些是在網路請求中最基本的幾個步驟,在我們寫的請求網狀圖片的代碼中,還有其餘的代碼需要補充。
我們代碼一步一步的來:
//將想要請求的圖片地址轉換成URL類 這個圖片的地址有點長
URL url = new URL("https://timgsa.baidu.com/timg? image&quality=80&size=b9999_10000&sec=1524759026299&di=47e39d74fe559c7ab60318fb308ab8fa&imgtype=0&src=http%3A%2F%2Fimgstore.cdn.sogou.com%2Fapp%2Fa%2F100540002%2F691448.jpg");
//通過openConnection來建立串連 這裡的HttpURLConnection是openConnection的傳回型別
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//在編程的時候我避免讓使用者死等,設定網路連接的逾時時間,讀取時間
//設定連線逾時為5秒
connection.setConnectTimeout(5000);
//設定讀取逾時為5秒
connection.setReadTimeout(5000);
//佈建要求網路的類型(GET或者POST)
connection.setRequestMethod("GET");
//提交網路請求
connection.connect();
//接受返回碼 這裡接受到的返回碼是int類型的
int code = connection.getResponseCode();
//通過返回碼判斷網路是否請求成功
if(code == 200){
//擷取串連返回的資料流
InputStream is = connection.getInputStream();
//因為返回的是個圖片所以通過位元影像的方式擷取
Bitmap bm = BitmapFactory.decodeStream(is);
//設定訊息
Message message = new Message();
message.what = 0;
message.obj = bm;
//通過handler發送訊息
handler.sendMessage(message);
}
在Android中執行耗時操作必須在子線程中執行,所以這裡我們需要一個Handler來在主線程中設定ImageView的圖片
Handler handler =new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
//如果msg.what是0 那麼儲存圖片顯示到ImageView中
case 0:
//在上面我們發送請求的時候把接受到的圖片放到了message中,所以我們這裡需要判斷是否是相應的數值
//才確定是否接受這個圖片
Bitmap bm = (Bitmap) msg.obj;
//設定ImageView圖片
imageView.setImageBitmap(bm);
break;
}
};
};
如果說我們的按鈕執行請求圖片的時,必須在子線程中執行,否則報錯;
btnButton這個是按鈕
btnButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//建立子線程
new Thread(){
@Override
public void run() {
// TODO Auto-generated method stub
//擷取圖片
getPic();
}
}.start();
}
});
Android通過請求網路擷取圖片資源