1. 程式人生 > >Android通過請求網路獲取圖片資源

Android通過請求網路獲取圖片資源

在日常的編寫Android軟體的過程中,避免不了使用網路請求,也不可能使用單機的Android,所以本次講的是通過Android傳送網路請求請求圖片的文章。

我先來總結一下網路請求的幾個步驟:

  1、將想要請求的圖片地址轉換成URL類

  2、通過openConnection來建立連線

  3、在程式設計的時候我避免讓使用者死等,設定網路連線的超時時間,讀取時間

  4、設定請求網路的型別(GET或者POST)

  5、提交網路請求

  6、接受返回碼,通過返回碼判斷網路是否請求成功

注意:這裡非常重要,任何網路請求必須加上網路許可權 <uses-permission android:name="android.permission.INTERNET"/>

這些是在網路請求中最基本的幾個步驟,在我們寫的請求網路圖片的程式碼中,還有其餘的程式碼需要補充。

我們程式碼一步一步的來:

  //將想要請求的圖片地址轉換成URL類   這個圖片的地址有點長

  URL url = newURL("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();
  }

});