0

我正在使用一种方法获取网站的图标。当然,并不是每个网站都有网站图标。所以我想抓住它。如果网站没有图标,应用程序不会崩溃,但我仍然在 LogCat 中收到 FileNotFoundException。

我遇到的问题是我无法抓住它

当我添加`catch (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 但这是同样的错误。当我在后台方法中将 throws 添加到异步任务中时,我得到了

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

我现在如何捕捉 FileNotFoundException?

4

3 回答 3

0

你可以在下面做这样的事情AsyncTask

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

您可以检查 img 是否为空,如果为空,则找不到图像,您可以做某事(或什么都不做)。在您的情况下,我认为您也应该将该try catch块放入getBitmapFromURL()函数中,因为我认为该函数中发生异常并且它不会传播到AsyncTask. 发布getBitmapFromURL()代码会更好地澄清事情。

于 2013-10-21T10:43:09.000 回答
0

getBitmapFromURL 应该在内部处理 filenotfoundexception 并在这种情况下返回 null。

我想你一定在做这样的地方

url.openConnection().getInputStream();

用 IOException 捕获块包围它。它也会捕获 FileNotFoundException。从该代码段返回 null

于 2013-10-21T09:55:47.903 回答
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 的块,那么它就可以工作。
此外,只需尝试添加这一行,希望它有效,

public Bitmap getBitmapFromURL(String url) throws IOException

那么你上面的代码就可以正常工作了。
如果您的代码不同,请粘贴代码。

于 2013-10-21T10:22:18.330 回答