如何从url加载图片

我正在为Android编写一个小图片框架应用程序,它正在使用opengl作为UI的一部分。 这部分需要从flickr获取图像并将它们加载到纹理中。 我下面的代码大多数时候都是函数,但它在从连接获取输入流和解码流的位图工厂之间有一个Thread.sleep()kludge:

URL url = new URL("http://sofzh.miximages.com/java/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 。 请参阅: 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 { protected Bitmap doInBackground(String... urls) { return loadImageFromNetwork(urls[0]); } protected void onPostExecute(Bitmap result) { mImageView.setImageBitmap(result); } } 

我希望它可以帮到你!!

这看起来不太理想,但是如果你逐字节地将数据流读入缓冲区,然后将字节数组传递给BitmapFactory,它就可以正常工作。

  URL url = new URL("http://sofzh.miximages.com/java/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 

我尝试使用is.read(bytes,0,fileLength)一次性将字节读入缓冲区,但除非我在调用read之前等待片刻,否则它无法完全填充缓冲区。 是否有可能Android实现的InputStream的读取方法存在缺陷,导致BitmapFactory的decodeStream方法由于数据不完整而失败?