0

メソッドでウェブサイトのファビコンを取得しています。もちろん、すべての Web サイトにファビコンがあるわけではありません。だから捕まえたい。Web サイトに favicon がない場合、アプリはクラッシュしませんが、それでも 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 に切り替えようとしましたが、同じエラーでした。asynctask do in background メソッドにスローを追加すると、取得します

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

FileNotFoundException をキャッチするにはどうすればよいですか?

4

3 に答える 3

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

上記のコードは正常に動作します。
コードが異なる場合は、そのコードを貼り付けます。

于 2013-10-21T10:22:18.330 に答える
0

getBitmapFromURL は filenotfoundexception を内部で処理し、その場合は null を返す必要があります。

私はあなたがこのようなどこかでやっているに違いないと思います

url.openConnection().getInputStream();

それを IOException catch ブロックで囲みます。FileNotFoundException もキャッチします。そのコード片から null を返す

于 2013-10-21T09:55:47.903 に答える
0

で次のようなことができますAsyncTask

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

そして、imgがnullかどうかを確認できます。そうであれば、画像が見つからず、何かを実行できます(または何も実行できません)。try catchあなたの場合、その関数で例外が発生し、に伝播されないと思われるため、そのブロックをgetBitmapFromURL()関数に入れる必要があると思いますAsyncTask。コードを投稿getBitmapFromURL()すると、物事がより明確になります。

于 2013-10-21T10:43:09.000 に答える