AsyncTaskは使ったことあるし、わかっているつもりだったのですが、ここのサンプルを読むと「こんな使い方するんだ!」という新たな驚きがありました。
サンプルコード BitmapFun.zip なのですが動かしてみると、サンプルの写真がキレイで感動すら覚えます。しかもネットワーク上の写真をHTTPで取得するサンプルでいろいろ勉強になります。
会社のパソコンでエミュレータ(AVD)で動かしたら、画像のダウンロードに失敗しました。
プロキシの影響でした。コードを書き換えると画像のダウンロードができるようになりました。
クラス: com.example.android.bitmapfun. util.ImageFetcher
メソッド: downloadUrlToStream(String, OutputStream)
urlConnection = (HttpURLConnection) url.openConnection();
これを書き直す。
↓↓↓↓
java.net.SocketAddress socketAddress = java.net.InetSocketAddress. createUnresolved("host", 50000/*port番号*/);
// java.net.SocketAddress socketAddress = new java.net.InetSocketAddress("host", 50000/*port番号*/); でもよいかも?
java.net.Proxy proxy = new java.net.Proxy(java.net.Proxy. Type.HTTP, socketAddress);
urlConnection = (HttpURLConnection) url.openConnection(proxy);
メソッド: downloadUrlToStream(String, OutputStream)
urlConnection = (HttpURLConnection) url.openConnection();
これを書き直す。
↓↓↓↓
java.net.SocketAddress socketAddress = java.net.InetSocketAddress.
// java.net.SocketAddress socketAddress = new java.net.InetSocketAddress("host", 50000/*port番号*/); でもよいかも?
java.net.Proxy proxy = new java.net.Proxy(java.net.Proxy.
urlConnection = (HttpURLConnection) url.openConnection(proxy);
※"host"とport番号はお使いの環境にあわせてください。
追伸
どうでもよいことですが、プロキシの設定をすればよいと気づいてコードを書き直したのですが、なかなか思ったとおりに動いてくれませんでした。
SocketAddress socketAddress = InetSocketAddress. createUnresolved("host", 50000/*port番号*/);
Proxy proxy = new Proxy(Proxy. Type.HTTP, socketAddress);
urlConnection = (HttpURLConnection) url.openConnection(proxy);
Proxy proxy = new Proxy(Proxy.
urlConnection = (HttpURLConnection) url.openConnection(proxy);
urlConnection = (HttpURLConnection) url.openConnection(); // proxy設定なしで、urlConnectionをセット★
★の行が残ったままになっていました。
追加した行にばかり気を取られて、あれこれ悩んで、気づくまで1時間くらい時間がかかりました。。。
0 件のコメント:
コメントを投稿