url.openStream()が失敗。

1,150 views
Skip to first unread message

shinriyo

unread,
Jul 29, 2011, 7:19:59 AM7/29/11
to android-g...@googlegroups.com

お世話になります。


URLにある画像をもとにOpenGLで表示したいと思い以下のコードを書きました。

しかし、url.openStream()が必ず失敗してしまします。

URLに画像は存在しています。

他に原因はありますでしょうか?


        URL url = null;

try {

url = new URL("http://存在している画像.png");

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

    Log.e("error", "can't read 1");

}

        InputStream input = null;

try {

input = url.openStream();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

    Log.e("error", "can't read 2");

}

        Bitmap bitmap= BitmapFactory.decodeStream(input);

Makoto Yamazaki

unread,
Jul 29, 2011, 8:33:30 AM7/29/11
to android-g...@googlegroups.com
zaki です。

どんな例外が出ているのですか?

2011/7/29 shinriyo <shin...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このディスカッションをウェブ上で閲覧するには、https://groups.google.com/d/msg/android-group-japan/-/cDueAAGh99oJ
> にアクセスしてください。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。
>

--
YAMAZAKI Makoto

hkondo

unread,
Jul 29, 2011, 2:43:03 PM7/29/11
to 日本Androidの会
shinriyo 様

AndroidManifest.xmlに下記パーミッションの設定が抜けているのではないでしょうか。
<uses-permission android:name="android.permission.INTERNET"></uses-
permission>

テスト用プログラムを作成し検証してみたところ、パーミッションがない状態では
「java.net.UnknownHostException」が発生しました。
もし同じ現象でしたらパーミッションの設定をご確認ください。

あと本件とはあまり関係ないのですが、InputStreamをcloseしていないのと、こちらの記述が気になりました。
> Bitmap bitmap= BitmapFactory.decodeStream(input);
url.openStream(); が失敗したときにinputはnullになっているため、
nullチェックもしくはtry catch内に入れるのがいいのではないでしょうか。

hkondo

shinriyo

unread,
Jul 30, 2011, 3:10:16 AM7/30/11
to android-g...@googlegroups.com
zakiさん

返信ありがとうございます。
url.openStream();で例外がキャッチされていましたが、
手元にコードがないので、今確認できませんので月曜日に見てみます。

hkondoさん

返信ありがとうございます。

手元にファイルがありませんが、AndroidManifest.xmlは確かにいじってないのでその可能性があります。

>url.openStream(); が失敗したときにinputはnullになっているため、 
>nullチェックもしくはtry catch内に入れるのがいいのではないでしょうか。 


アドバイスありがとうございます。
修正しておきます。


shinriyo

unread,
Jul 31, 2011, 8:44:08 PM7/31/11
to android-g...@googlegroups.com

こんにちは


本日試してみました

<uses-permission android:name="android.permission.INTERNET"></uses-permission> <manifest>タグのすぐ下へ配置しました。

コードを下記のように修正しました。一応動くようになりましたが、

ソースコードのコメント(1)で「input == null」のでtrue時にも

(2)のNullPointerExceptionでキャッチされませんでしが、input == nullの例外を記載したい時はどのように記載するべきでしょうか?


URL url = null;

try {

    url = new URL("http://存在している.png");

} catch (MalformedURLException e) {

    Log.e("error", "can't read URL");

}

InputStream input = null;

try {

    input = url.openStream();

} catch (IOException e) {

    Log.e("error", "can't stream");

}

if (input == null) {

    Log.e("error", "input is null"); // (1)

}

Bitmap bitmap = null;

try  {  

    bitmap= BitmapFactory.decodeStream(input);

catch (NullPointerException e)  { // (2)

    Log.e("error", "NullPointerException");

catch (Exception e)  {  

    Log.e("error", "Exception");

}


Reply all
Reply to author
Forward
0 new messages