2010-12-01 1 views
2

UIの一部にOpenGLを使用しているアンドロイドの小さな画像フレームアプリを作成しています。この部分は、フリッカーから画像を取得し、それらをテクスチャにロードする必要があります。私は以下の持っているコードは、ほとんどの時間機能しているが、それは接続から入力ストリームを取得し、ストリームをデコードし、ビットマップの工場間でのThread.sleep()その場しのぎありますURLから画像をロードするには

  URL url = new URL("http://farm5.static.flickr.com/4132/5168797476_7a85deb2be_b.jpg"); 
      URLConnection con = url.openConnection(); 
      InputStream is = con.getInputStream(); 
      Thread.sleep(250); //What am I actually waiting for? 
      sourceBitmap = BitmapFactory.decodeStream(is); 

私はどのように得るかを論理的に意味のあるものに賛成してsleep()メソッドを使用していますか?

私は私はあなたがAsyncTaskを実装するべきだと思いませんエミュレータ

答えて

0

これは理想的ではないようですが、ストリームを1バイトずつバッファに読み込んだ後、バイト配列をBitmapFactoryに渡すと正しく動作します。

  URL url = new URL("http://farm5.static.flickr.com/4132/5168797476_7a85deb2be_b.jpg"); 
      URLConnection con = url.openConnection(); 
      con.connect(); 
      int fileLength = con.getContentLength(); 
      InputStream is = con.getInputStream(); 
      byte[] bytes = new byte[fileLength]; 
      for(int i=0;i<fileLength;i++) { 
       bytes[i] = (byte)is.read(); 
      } 
      sourceBitmap = BitmapFactory.decodeByteArray(bytes, 0, fileLength); 

私はis.read(バイト、0、FileLength関数)ですべてを一度バッファにバイトを読み込むしようとしたが、私は、読み取りを呼び出す前に、瞬間を待っていない限り、それが確実に完全にバッファを満たすませんでした。 InputStreamのreadメソッドのアンドロイド実装に欠陥があり、BitmapFactoryのdecodeStreamメソッドが不完全なデータによって失敗する可能性がありますか?

0

でサムスンのギャラクシータブでテストしています。これを参照してください:http://developer.android.com/resources/articles/painless-threading.html

public void onClick(View v) { 
    new DownloadImageTask().execute("http://example.com/image.png"); 
} 

private class DownloadImageTask extends AsyncTask<string, void,="" bitmap=""> { 
    protected Bitmap doInBackground(String... urls) { 
     return loadImageFromNetwork(urls[0]); 
    } 

    protected void onPostExecute(Bitmap result) { 
     mImageView.setImageBitmap(result); 
    } 
} 

私はあなたを助けてくれることを願っています!

+0

イメージを非同期でダウンロードすることはもちろん良い考えですが、実際の問題には実際には触れません –

関連する問題