2013-10-21 46 views
0

我使用方法獲取網站的圖標。當然不是每個網站都有一個favicon。所以我想抓住它。如果網站沒有收藏圖標,該應用程序不會崩潰,但我仍然在LogCat中遇到FileNotFoundException。在AsyncTask方法中捕獲FileNotFoundException

我現在遇到的問題是,我無法抓住它

當我添加`抓(FileNotFoundException異常F)

我try-catch塊它告訴我

Unreachable catch block for FileNotFoundException. This exception is never thrown from the try statement body. 

我擁有的選項是刪除它或向doInBackground方法添加一個throws聲明。後者是不可能的。這是整個的try-catch

try{ 
String baseURL  = getBaseURL (sourceURLArr[i]); 
System.out.println(baseURL + "/favicon.ico"); 
Bitmap favicon  = getBitmapFromURL(baseURL + "/favicon.ico"); 
Drawable fv   = new BitmapDrawable(getResources(),  
Bitmap.createScaledBitmap(favicon, 20, 20, true)); 
source  [i].setCompoundDrawablesWithIntrinsicBounds(fv, null, null, null); 
} catch(NullPointerException e){ 

} catch(FileNotFoundException f){ 

} 

我已經嘗試與NullPointerException異常切換FileNotFoundException異常,但它是同樣的錯誤。當我添加了罰球到的AsyncTask做後臺的方法,我得到

Exception FileNotFoundException is not compatible with throws clause in AsyncTask<Void,Void,Void>.doInBackground(Void[])

我現在如何才能趕上FileNotFoundException異常?

+0

你沒有處理任何文件..所以你爲什麼使用FileNotFoundException? –

+0

那麼,我的LogCat告訴我這是一個FileNotFoundException。我正在下載favicon.ico - 或者,我想下載它。如果它不可用,它是一個FileNotFoundException,因爲該文件不存在,並且沒有找到或者我理解了某事。錯誤? – Musterknabe

+0

所以最好在該行嘗試它位圖favicon = getBitmapFromURL(baseURL +「/favicon.ico」); –

回答

0

getBitmapFromURL應該在內部處理filenotfoundexception並在這種情況下返回null。

我想你一定在做這樣的

url.openConnection()的getInputStream()。

包圍與IOException catch塊。它也會捕獲FileNotFoundException。 返回null從這段代碼

+0

當我將它添加到getBitmapFromURL方法時,我也得到了它無法訪問的相同錯誤。或者我應該添加它作爲一個拋出decleration? – Musterknabe

0

如果產生從URL位的代碼是一樣的東西,

public Bitmap getBitmapFromURL(String url) 
    { 
     URL url = new URL(sUrl); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     InputStream is = connection.getInputStream(); 
     Bitmap img = BitmapFactory.decodeStream(is); 
    } 

那麼如果我加入,對於FileNotFoundException異常catch塊,然後它工作。
此外,只要嘗試添加此行希望工程,

public Bitmap getBitmapFromURL(String url) throws IOException 

那麼你上面的代碼將正常工作。
如果您的代碼不同,請粘貼代碼。

+0

寧可再發布已發佈的相同答案。更喜歡對它進行投票或評論。投票和評論答案僅用於此目的。 – Javanator

0

你可以做這樣的事情在AsyncTask

URL url = new URL("http://yourURL"); 
Bitmap img = BitmapFactory.decodeStream(url.openConnection().getInputStream()); 

,你可以檢查,如果IMG爲空,如果是則圖像不被發現,你可以做一些事情(或沒有)。在你的情況下,我認爲你應該把try catch塊放在getBitmapFromURL()函數中,因爲我認爲該函數發生異常,並且它不會傳播到AsyncTask。 發佈getBitmapFromURL()代碼將更好地闡明事情。