【问题标题】:Catch FileNotFoundException in AsyncTask method在 AsyncTask 方法中捕获 FileNotFoundException
【发布时间】:2013-10-21 09:50:40
【问题描述】:

我正在使用一种方法获取网站的图标。当然,并不是每个网站都有网站图标。所以我想抓住它。如果网站没有网站图标,应用程序不会崩溃,但我仍然在 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){

}

我已经尝试将 FileNotFoundException 与 NullPointerException 切换,但这是同样的错误。当我在后台方法中将 throws 添加到异步任务中时,我得到了

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

我现在如何捕获 FileNotFoundException?

【问题讨论】:

  • 你没有处理任何文件..那你为什么要使用 FileNotFoundException ?
  • 好吧,我的 LogCat 告诉我这是一个 FileNotFoundException。我正在下载 favicon.ico - 或者,我想下载它。如果它不可用,它是一个 FileNotFoundException,因为该文件不存在并且尚未找到,或者我是否理解某事。错了吗?
  • 所以最好在 Bitmap favicon = getBitmapFromURL(baseURL + "/favicon.ico");
  • getBitmapFromURL 函数的代码是什么?

标签: java android exception-handling android-asynctask


【解决方案1】:

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

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

url.openConnection().getInputStream();

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

【讨论】:

  • 当我将它添加到 getBitmapFromURL 方法时,我也会得到与它无法访问相同的错误。还是应该将其添加为 throws decleration?
【解决方案2】:

如果从 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

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

【讨论】:

  • 宁愿再次发布已经发布的相同答案。更喜欢投票或对此发表评论。投票和评论答案仅用于此目的。
【解决方案3】:

您可以在AsyncTask 中执行类似的操作:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2014-02-03
    • 2017-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多