我正在使用一个Android应用程序,该应用程序从服务器下载图像,将其读入位图并显示在ImageView上
这在大多数情况下都有效,但是每隔一段时间,它就会经历整个过程(有一个ProgressDialog提示“正在获取图像...”),一旦完成,则什么都不显示。 logcat中没有任何东西似乎与这有远程关系。
这是代码:
Bitmap image = null;
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(webService + "?cmd=get");
try
{
HttpResponse resp = client.execute(get);
Log.i("PhotoRouletteDebug", "Resp buffer size: " + (int)resp.getEntity().getContentLength());
InputStream is = resp.getEntity().getContent();
BufferedInputStream buf = new BufferedInputStream(is, (int)resp.getEntity().getContentLength());
image = BitmapFactory.decodeStream(buf);
// clean up
buf.close();
is.close();
即使什么都没有显示,Resp内容长度也始终报告正确的大小,但是仍然没有任何结果显示出来。
可以从AsyncTask调用此代码,但是一次只能调用1个任务。
这让我发疯,我不知道为什么它会继续这样做。
编辑:这是设置imageView的代码
// AsyncTask for Getting a new image from the queue
protected class GetImageTask extends AsyncTask<String, String, Bitmap>
{
protected void onPreExecute()
{
// lets show a progress dialog so the user knows something is going on
progressDialog = ProgressDialog.show(PhotoRoulette.this, "", "Fetching image...", true);
}
protected void onPostExecute (Bitmap image)
{
// we got a new photo so lets display it where it needs to be displayed
try
{
photoView = (ImageView)findViewById(R.id.photoView);
photoView.setImageBitmap(image);
}
catch (Exception e)
{
Log.e("Debug", "Something absolutely retarded happened", e);
}
// hide the progress dialog - we're all done
progressDialog.dismiss();
}
protected Bitmap doInBackground(String... urls)
{
// Get a new Bitmap Queue Image
Bitmap image = imageHandler.getQueueImage();
return image;
}
}
最佳答案
您没有向我们显示显示图像的代码,因此我们不确定该代码是否正确。也许问题出在那儿?
但是,假设问题在于映像已损坏,这是我开始调试的方法:用PushbackInputStream包裹buf
。从buf中读取字节并将其保存到文件中;然后将这些相同的字节推回PushbackInputStream
中。然后将PushbackInputStream
传递到BitmapFactory.decodeStream
。如果成功显示了图像,则(手动或以编程方式)删除文件。否则,您现在可以随意检查位图。