Androidアプリでネット上の画像を表示

このQ&Aのポイント
  • Androidアプリでネット上の画像を表示する方法を学び、実装しましたが、画像が取り損ねることがあります。その対応方法を知りたいです。
  • Androidアプリでネット上の画像を表示するための方法を学びましたが、時々画像が表示されないことがあります。画像取得の回避方法について教えてください。
  • Androidアプリでネット上の画像を表示する際、画像を取り損ねる場合があります。その回避方法について教えてください。
回答を見る
  • ベストアンサー

Androidアプリでネット上の画像を表示

また、お世話になります Androidアプリを勉強しながら作成しております 以前、ネット上にある画像をアプリに読込して表示する方法を聞いて、勉強しながら表示する事が出来ました。 しかし、たまに取り損ねる事がありこの回避方法を教えてください。 現在のソース String url = "http://www.hogehoge.com/hoge.jpg"; try { URL url = new URL(url); InputStream input = url.openStream(); Bitmap bitmap = BitmapFactory.decodeStream(input); Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, 100, 75, true); getimg1.setImageBitmap(bitmap1); } catch (Exception ex) { ex.printStackTrace(); } finally { } 【知りたい事】 ネット上にある(必ずあるのが条件)画像を取り損ねる事があるので、その対応方法を知りたい。 【開発環境】 eclipse galaxy S Windows vista スペルミス等がありましたら、ご了承ください。 宜しくお願します。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • tegra
  • ベストアンサー率64% (9/14)
回答No.2

こんな感じで動くと思います。 String urlStr = "http://www.hogehoge.com/hoge.jpg"; InputStream input = null; // 画像取得に最大3回チャレンジ for (int i = 0; i < 3; i++) { try { URL url = new URL(urlStr); input = url.openStream(); Bitmap bitmap = BitmapFactory.decodeStream(input); Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, 100, 75, true); getimg1.setImageBitmap(bitmap1); break; // 画像取得できた場合はループを抜ける } catch (FileNotFoundException e) { // 画像が取得できないので100ミリ秒(0.1秒)してから再取得する try { Thread.sleep(100); } catch (InterruptedException e1) { e1.printStackTrace(); } } catch (Exception ex) { ex.printStackTrace(); } } if (input == null) { // ここに画像が取得できない場合の処理を書く }

nstammy507
質問者

お礼

tegraさんありがとうございますm(__)m 感謝感謝です。 さっそく帰宅したらやって見たいと思います。 本当にありがとうございます。

その他の回答 (1)

  • tegra
  • ベストアンサー率64% (9/14)
回答No.1

はじめまして。 端末で動作させているのかわかりませんが、電波状況が悪くて取れないのでは? もしくは相手側の通信状態が原因かもしれません。 対応としてはループ処理で何回か画像の取得にチャレンジする のはどうでしょうか。 たとえば100ミリ秒ごとに3回チャレンジして、画像が取得できればOK。 ってな感じで。

nstammy507
質問者

お礼

早々ありがとうございます。 ループ処理処理と数回チャレンジさせる方法がイマイチやり方が分かりません。泣 もしよろしければやり方教えてください。 また、参考になるサイトありましたら教えてください。

関連するQ&A

  • Andorid tryで取得した画像表示について

    こんばんは ちょっと初心者には質問方法が難しいです。 Andoridアプリを勉強しながら作成しています。 ネット上から取得した画像を端末に表示しています。 (1)-------------------- 中略 try { URL url = new URL(photour2); InputStream input = url.openStream(); Bitmap bitmap = BitmapFactory.decodeStream(input); Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, 120, 160, true); getimg1.setImageBitmap(bitmap1);←【ここ】 } catch (Exception exx) { changeImageView = (ImageView)findViewById(R.id.imageView3); changeImageId = R.drawable.now; changeImageView.setImageResource(changeImageId); ex.printStackTrace(); } finally { } ex.printStackTrace(); } finally { } -------------------- を、 (2)-------------------- 中略 try { URL url = new URL(photour2); InputStream input = url.openStream(); Bitmap bitmap = BitmapFactory.decodeStream(input); Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, 120, 160, true); } catch (Exception exx) { ex.printStackTrace(); } finally { } ex.printStackTrace(); } finally { } 中略 if (bitmap1の判定){ getimg1.setImageBitmap(bitmap1);←【ここで表示させたい】 } else { changeImageView = (ImageView)findViewById(R.id.imageView3); changeImageId = R.drawable.now; changeImageView.setImageResource(changeImageId); } -------------------- (1)を(2)のように、tryしてその直後では無く、いろいろ処理してから表示させたいのですが、うまくいきません。 Java初心者で専門用語もわからず、質問方法もわからない状態です。 (1)ではうまく表示されています。 【開発環境】 Eclipse 【やった事】 ググりました沢山ヒットしますが目的の答えが見つかりませんでした。 (専門用語がわからないので、適切な検索とはいえませんが・・・・泣) 【質問・やりたい事】 (1)なんでtryの中で表示されていた画像が、外に出たら表示されないのですか? (2)どうやったら表示する事が出来ますか? 質問するにも低レベル過ぎて本当に失礼と思いますが、是非アドバイスと回答よろしくお願いたします

    • ベストアンサー
    • Java
  • Androidアプリ開発に関する質問です。

    Androidアプリ開発に関する質問です。 Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.xxx); という記述でres/drawable-hdpi/xxx.png の画像を持ってくることができると思うのですが、 データベースに保存したString型のxxxを使って動的に画像を表示する方法が分かりません。 データベースから画像名を持ってくる前に、String型の変数(仮にstrとする)に画像名を入れて、 Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.str); と記述してもstrを変数として扱ってくれません。 どなたかres/drawable/の画像を動的に持ってくる方法を教えて頂けないでしょうか。

    • ベストアンサー
    • Java
  • Androidアプリでネット上から取得した画像を表

    また、お世話になります Androidアプリを勉強しながら作成しております 以前アプリからインターネット上の画像を読込して表示したいと質問たところ回答頂いたので、いろいろやってみたのですが未だ表示する事が出来ずにいます 回答を頂いて、いろいろ調べて試してみましたが全然わからない状態です http://bit.ly/dVhcV3 回答でアドバイス頂きそれまで調べれなかった事も検索出来て試行錯誤してやりましたが、どうしても出来ないのでよろしくお願します (good-failure様本当にありがとうございました) 以下がソースです package jp.imgs; import 文字数オーバーの為省略 /** メインクラスの定義 */ public class testimgs extends Activity { /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);      //ここ未処理です   ImageView img = (ImageView)findViewById(R.id.imageView2);  ImageInputStream imgin = null;  InputStream in = null;  try {  //インスタンス化  URL url = new URL("http://www.hoge.com/hoge.png");  //インスタンスを取得  HttpURLConnection connect =(HttpURLConnection)url.openConnection();  //  connect.setDoInput(true);  //ダウンロード指定  connect.setRequestMethod("GET");  //データ取得  in = connect.getInputStream();  //エラー出ていると思われる部分  imgin = ImageIO.createImageInputStream(in);  //以下未処理です  BufferedImage im = ImageIO.read(imgin);  // 後はBufferedImageを適当に利用する  // 出来れば img に BufferedImage im を入れたい  } catch (Exception ex) {  ex.printStackTrace();  } finally {  try {  imgin.close();  //eclipseで×出るのでコメントアウト中 // connect.disconnect();  }  catch (Exception ex2) {  ex2.printStackTrace();  }  }  } } (ソースには誤りがあると思います) 【私の知識&技術レベル】 PHPとMySQLを少々、Java初体験 【現状】 エミュレータ、実機でテスト エラー発生(『The application tetings(process jp.imgs)has stopped unexpextedly.Olease try again.』)するのでコメントアウトしながらエラー発生場所を逆上ると ImageInputStream imgin = ImageIO.createImageInputStream(in); で、発生しているようです 【開発環境】 Eclipse 【やった事】 ググりました沢山ヒットしますが目的のソースに出会う事は出来ませんでした 【質問・やりたい事】 (1)setContentView(R.layout.main)の中の(R.id.imageView2)に外部から取得した画像を表示したい (2)finallyの処理のdisconnect();で構文エラー出ているのでその対応方法 以上2点です 質問するにも低レベル過ぎて本当に失礼と思いますが、是非アドバイスと回答よろしくお願いたします

    • ベストアンサー
    • Java
  • Androidでjcifsを用いた画像の表示

    現在,Android4.4.2の端末にLANで接続されたWindowsPC内の画像ファイルを表示しようとしています. 下記のようにファイルの存在を確認してからimageViewに表示させようとしており、ファイルがあればfile.exists()はtrueを返し、なければfalseを返すことから、ファイルの存在の確認は問題なく行えていることはわかりました. しかし,デコードする部分でFileNotFoundExceptionが発生してしまいます. 処理はAsyncTaskのdoingBackGroud内で行っています. try { SmbFile file = new SmbFile("smb://mypc:7360@192.168.11.15/Users/mypc/test.bmp/"); if (file.exists()){ Log.e(TAG,"OK"); }else{ Log.e(TAG,"NO"); } Bitmap originalImage = BitmapFactory.decodeFile(file.getPath()); iv1.setImageBitmap(originalImage); } catch (Exception e ) { e.printStackTrace(); } このような場合、何が原因であると考えられるでしょうか? お分かりになられる方がいらっしゃいましたら何卒ご教授宜しく御願い致します.

    • ベストアンサー
    • Java
  • クリックして画像を変え、一定時間経過後もとに戻す

    androidアプリを作成している初心者です。 画像をクリックすると画像が変わるようになるようにしたいと思ってます。 画像を変えるところまではできたのですが、 一定時間経過後にもとに戻すにはどうしたらいいかがわかりません。 以下、ソースコード。 public class MainActivity extends Activity { ImageView iv; Bitmap bmp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.HORIZONTAL); ll.setGravity(Gravity.CENTER); setContentView(ll); //画像表示 iv = new ImageView(this); bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ikari); iv.setImageBitmap(bmp); ll.addView(iv); //画像をクリックした時に関数を呼び出す iv.setOnClickListener(new img_ac()); } //画像を変える class img_ac implements OnClickListener { public void onClick(View v) { ImageView tmp = (ImageView) v; tmp.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); } } } 一定時間経過後に元の画像に戻すには、どのようにしたら良いのでしょうか。

    • ベストアンサー
    • Java
  • ファイルの書き出しについて、どちらのほうが良い方法でしょうか?

    下の2つのメソッドでどちらのほうがよいでしょうか? 実行時間的にはuseStringのほうが若干速いのですが... メモリ消費とかセオリーとか常識とかそういうのを含めて解説を頂きたいです。 今のところ結果は同じものが出力されています。 public static void useString() { try { System.out.println("start useString"); URL url = new URL("どこかのページ"); File outputFile = new File("test1.html"); InputStream input = url.openStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(input)); BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile.toString(), true)); String tmp = ""; String str; while ((str = reader.readLine()) != null) { writer.write(tmp); } reader.close(); input.close(); writer.write(tmp); writer.close(); } catch (IOException e) { e.printStackTrace(System.out); } } public static void useStream() { try { URL url = new URL("どこかのページ"); File outputFile = new File("test.html"); InputStream input = url.openStream(); FileOutputStream output = new FileOutputStream(outputFile); byte[] bytes = new byte[2048]; int n; while ((n = input.read(bytes)) >= 0) { output.write(bytes, 0, n); } input.close(); output.close(); } catch (IOException e) { e.printStackTrace(System.out); } }

    • ベストアンサー
    • Java
  • 【Flash馬鹿のJava】連番画像ファイルの読込について

    【Flash馬鹿のJava】連番画像ファイルの読込について 対象バージョン:J2SE1.6 / Android1.6 はじめましてFlash馬鹿です。Java初心者です。 連番画像ファイルを一気に読み込みたいのですが、方法が分かりません。 Flashでいうところの for(i=1;i<100;i++){ this["loadmc" + i].loadMovie("image" + i + "png") } みたいなことがしたいです。 private Bitmap image1; private Bitmap image2; private Bitmap image3; image1 = BitmapFactory.decodeResource(r, R.drawable.image1); image2 = BitmapFactory.decodeResource(r, R.drawable.image2); image3 = BitmapFactory.decodeResource(r, R.drawable.image3); だといけますが private ArrayList<Bitmap> image; image.add(BitmapFactory.decodeResource(r, R.drawable.image1)); image.add(BitmapFactory.decodeResource(r, R.drawable.image2)); image.add(BitmapFactory.decodeResource(r, R.drawable.image3)); にするとAndroid1.6のシミュレータが落ちます。 また、連番の画像リソースを指定する方法("image" + i + "png")も分かりませんので 教えていただけると幸いです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Androidアプリで外部から読み込んだ画像データ

    こんにちは Androidアプリを勉強しながら作成しています。 今までPHPとMySQLをやっていたのですが、JAVA初体験でわからない事が沢山あり専門書を見たりネットで検索したりしております。 今回の質問は外部(インターネット上)にある画像を端末に表示する方法がわからず質問してみました。 【例】 http://www.hogehoge.com/hoge.png 上記のhoge.pngをアプリ側の画面に表示させたい。 いろいろ検索して調べて見たのですが、素人なので専門用語に弱くここに来ました。 どのようにしたら表示出来るのか教えてください。 また、参考になるサイトありましたら、是非教えてください。 なにぶん初心者なのでよろしくお願いいたします。

    • ベストアンサー
    • Java
  • URLで指定したページのデータを読むには?

    URLをしていしてデータを読み込みたいのですが”java.net.ConnectException: Connection timed out”となってしまいます。なぜでしょうか。 import java.io.*; import java.net.*; /** * ウェブ上のデータを取得するサンプル * */ public class GetFileFromWeb { public static void main(String[] args){ URL url = null; //HttpURLConnection con = null; try{ //URLの指定 url = new URL("http://www.****"); //入力ストリームを取得する InputStream is = url.openStream(); //URLからデータを読み取り、表示する。 byte[] data = new byte[1024]; int i; while((i=is.read(data))!=-1){ System.out.write(data, 0, i); } }catch(MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • エラーメッセージで教えていただけないでしょうか

    はじめまして。 下記のソースでデバックをすると処理が途中で止まってしまいます。 原因がわからず悩んでいます。 どなたか教えていただけないでしょうか。よろしくお願いします。 // photoというIDのImageViewオブジェクトを取得 ImageView img = (ImageView)this.findViewById(R.id.photo); // assetsディレクトリのファイルにアクセス AssetManager am = getResources().getAssets(); BufferedInputStream buf; Log.d("tag","img"); try{ buf = new BufferedInputStream(am.open("eijyu.jpg"),10000); Log.d("tag","buf"); // バッファからBitmapを作成 Bitmap bitmap = BitmapFactory.decodeStream(buf); Log.d("tag","img"); // ImageViewに作成したBitmapを表示 img.setImageBitmap(bitmap); ← この部分が原因っぽい。 Log.d("tag","set"); // バッファを閉じる buf.close(); Log.d("tag","buf_close"); }catch (IOException e){ e.printStackTrace(); Log.d("tag","catch"); } ERROR: thread attach failed Got RemoteException sending setActive(false)notification to pid 1878 uid 10031