首页 > 解决方案 > 图像无法在 android 的列表视图中正确显示

问题描述

我正在下载多个附件,然后在 sdcard 中写入图像,但我的问题是,当在列表中显示来自 sdcard 的图像显示半黑色图像时,我正在使用 picasso 图像加载器来显示来自 sdcard 的图像。我在使用滑翔图像加载器时遇到了同样的问题。看截图在此处输入图像描述

注意:当我在 sdcard 中看到图像时,图像已正确下载。

//显示来自sdcard的图片

Picasso.get().load(uri).resize(200, 200).centerCrop().into(holder.imageAttach);

//代码通过URL下载图片并写入sdcard

URL url = new URL(urlString);//Create Download URl
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();//Open Url Connection
urlConnection.setRequestMethod("GET");//Set Request Method to "GET" since we are getting data
urlConnection.connect();//connect the URL Connection
double fileSize = 0;

//Create New File if not present
if (!filePath.exists()) {
    filePath.createNewFile();
}

//If Connection response is not OK then show Logs
if (urlConnection.getResponseCode() != HttpURLConnection.HTTP_OK) {
    Log.e("AutoDownloader", "Server returned HTTP "
        + urlConnection.getResponseCode()
        + " " + urlConnection.getResponseMessage());
}

BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(filePath));//Get OutputStream for NewFile Location

InputStream is = urlConnection.getInputStream();//Get InputStream for connection

byte[] buffer = new byte[1024];//Set buffer type
int len1 = 0;//init length
while ((len1 = is.read(buffer)) != -1) {
    fos.write(buffer, 0, len1);//Write new file
}

//Close all connection after doing task
fos.close();
is.close();

Log.i("AutoDownloader", "downloadAttachmentInByte startDownload success");
try{
    ((Activity)ContextHelper.getContext()).runOnUiThread(new Runnable() {
        @Override
                public void run() {
                        progressBar.setVisibility(View.GONE);
                }
         });
} catch (Exception e){
     e.printStackTrace();
}

标签: androidpicassoandroid-sdcardimagedownload

解决方案


我认为您的图像没有正确下载。我建议让Picasso他们为您完成全部工作。-

Target target = new Target() {  
    @Override
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        holder.imageAttach.setImageBitmap(bitmap);
          new Thread(new Runnable() {

                    @Override
                    public void run() {

                        File file = new File(Environment.getExternalStorageDirectory().getPath() + "/" + url);
                        try {
                            file.createNewFile();
                            FileOutputStream ostream = new FileOutputStream(file);
                            bitmap.compress(Bitmap.CompressFormat.JPEG, 80, ostream);
                            ostream.flush();
                            ostream.close();
                        } catch (IOException e) {
                            Log.e("IOException", e.getLocalizedMessage());
                        }
                    }
                }).start();
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {}

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {}
};

  Picasso.with(getApplicationContext())
      .load(photoUrl)
      .resize(200, 200)
      .into(target);

推荐阅读