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

來源:互聯網
上載者:User

標籤:基本   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通過請求網路擷取圖片資源

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.