網路查看圖片

來源:互聯網
上載者:User

標籤:

 1 public void viewImage(View view) 2     { 3         String path=etImageUrl.getText().toString();//把圖片路徑轉換成字串 4         if(TextUtils.isEmpty(path)) 5         { 6             /* 7              * question:對於一個UI介面中,當判斷使用者是否輸入使用者名稱或密碼時,我們常用TextUtils.isEmpty()方法來判斷;但有時也可以用這個equals()方法,都可以來判斷EditText中是否為空白,但有時很糾結,不知道這兩種方法中哪個比較好?為什嗎?*/ 8                answer:仔細讀官方的API:  Returns true if the string is null or 0-length.   9                因為你從EditText返回的是一個變數。如果這個變數本身為null值,那麼你掉它的equals方法是要報錯的。但是如果你調用TextUtils.isEmpty() 把這個變數作為參數傳進去。10              只要這個參數為空白或者為"",都會返回真。所以,用官方給的更加嚴謹。而且,也十分方便。因為你單獨去判斷你還不是要寫一個if語句判斷。返回的還是一個boolean值*/11             12             Toast.makeText(this, R.string.NOnull, Toast.LENGTH_LONG).show();//如果輸入路徑為空白,就彈出Toast13         }else{14             //不為空白,串連伺服器,請求獲得圖片15             try{16             URL url=new URL(path);17             //發出http請求18             HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();19             httpURLConnection.setRequestMethod("GET");//設定提交方式20             //設定連線逾時時間21             httpURLConnection.setConnectTimeout(5000);//這時,我們設定為逾時時間為5秒,如果5秒內不能串連就被認為是有錯誤發生.22             int responsecode=httpURLConnection.getResponseCode();23             if(responsecode==200){24                 InputStream inputstream=httpURLConnection.getInputStream();25                 Bitmap bitmap=BitmapFactory.decodeStream(inputstream);26                 ivImage.setImageBitmap(bitmap);27             }else{28                 Toast.makeText(this, R.string.error, Toast.LENGTH_LONG).show();29             }30         }catch(MalformedURLException e){31             e.printStackTrace();32         }catch(IOException E){33             E.printStackTrace();34         }35         36     }

 

UI線程

說了那麼多的UI線程,那麼哪些屬於UI線程呢?

UI線程主要包括如下:

    1. Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick(),etc

    2. AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel,etc

    3. Mainthread handler: handleMessage(), post*(runnable r), etc

所以,應該對該演算法進行改進,這就引入了線程的概念,關於線程,在ASP.NET或者java中應該都有詳細解釋。下面不再進行詳細贅餘。

什麼是進程? 當一個程式開始運行時,它就是一個進程,進程包括運行中的程式和程式所使用到的記憶體和系統資源。 而一個進程又是由多個線程所組成的。
什麼是線程? 線程是程式中的一個執行流,每個線程都有自己的專有寄存器(棧指標、程式計數器等),但代碼區是共用的,即不同的線程可以執行同樣的函數。
什麼是多線程? 多線程是指程式中包含多個執行流,即在一個程式中可以同時運行多個不同的線程來執行不同的任務,也就是說允許單個程式建立多個並存執行的線程來完成各自的任務。
多線程的好處: 可以提高CPU的利用率。在多線程程式中,一個線程必須等待的時候,CPU可以運行其它的線程而不是等待,這樣就大大提高了程式的效率。
多線程的不利方面: 線程也是程式,所以線程需要佔用記憶體,線程越多佔用記憶體也越多; 多線程需要協調和管理,所以需要CPU時間跟蹤線程; 線程之間對共用資源的訪問會相互影響,必須解決競用共用資源的問題; 線程太多會導致控制太複雜,最終可能造成很多Bug。

改進後的程式:(採用的是匿名內部類的方法)

 

 1 public void viewImage(View view){ 2         final String imageUrl=etImageUrl.getText().toString(); 3         if(TextUtils.isEmpty(imageUrl)){ 4             Toast.makeText(this, "圖片路徑不可為空", Toast.LENGTH_LONG).show(); 5         }else{ 6             new Thread(){ 7                  8                     public void run() { 9                         try {   //在處理的過程中,必須進行異常處理10                             URL url=new URL(imageUrl);11                             HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();12                             httpURLConnection.setRequestMethod("GET");13                             httpURLConnection.setConnectTimeout(5000);14                             int responseCode=httpURLConnection.getResponseCode();15                             if(responseCode==200){16                                 InputStream inputStream=httpURLConnection.getInputStream();17                                 Bitmap bitmap=BitmapFactory.decodeStream(inputStream);18                                 Message message=new Message();19                                 message.what=SHOWIMAGE;20                                 message.obj=bitmap;21                                 //ivImage.setImageBitmap(bitmap);22                                 handler.sendMessage(message);23                             }else{24                                 Toast.makeText(MainActivity.this, "顯示圖片失敗", Toast.LENGTH_LONG).show();25                             }26                         } catch (MalformedURLException e) {27                             e.printStackTrace();28                         } catch (IOException e) {29                             e.printStackTrace();30                         }31                     32                 }33             }.start();34             35         }36     }

 

 

在文字框中輸入圖片的路徑,點擊瀏覽按鈕的同時,將會在上方的ImageView中顯示出來該圖片。

想要實現上面的程式,需要在按鈕的點擊事件中,在MainActivity的初始代碼:

網路查看圖片

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.