我正在通过一种方法获得网站的图标。当然不是每个网站都有一个图标。所以我想抓住它。如果网站没有图标,但应用程序不会崩溃,但我仍然在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?
答案 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()
代码可以更好地澄清事情。