在AsyncTask方法中捕获FileNotFoundException

时间:2013-10-21 09:50:40

标签: java android exception-handling android-asynctask

我正在通过一种方法获得网站的图标。当然不是每个网站都有一个图标。所以我想抓住它。如果网站没有图标,但应用程序不会崩溃,但我仍然在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,但它是同样的错误。当我在后台方法中添加抛出到asynctask时,我得到了

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

我现在如何捕获FileNotFoundException?

3 个答案:

答案 0 :(得分:0)

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

我想你一定要做这样的事情

url.openConnection()的getInputStream();

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

答案 1 :(得分: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

然后您的上述代码将正常工作 如果您的代码不同,请粘贴代码。

答案 2 :(得分:0)

你可以在AsyncTask

中做同样的事情
URL url = new URL("http://yourURL");
Bitmap img = BitmapFactory.decodeStream(url.openConnection().getInputStream());

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