图片在android中的listview中无法正常显示

时间:2018-04-27 06:11:08

标签: android picasso android-sdcard imagedownload

我正在下载多个附件,然后在SD卡中写入图像,但我的问题是,当显示图像显示半黑色图像时,我使用picasso图像加载器显示来自SD卡的图像。滑翔图像加载器我遇到了同样的问题。见截图enter image description here

注意:当我在SD卡中看到图像时,图像会正确下载。

//显示来自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();
}

3 个答案:

答案 0 :(得分:1)

我认为您的图片无法正常下载。我建议让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); 为你做全部工作。 -

{{1}}

答案 1 :(得分:0)

尝试将android:scaleType="fitXY"添加到 ImageView

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

替换只需使用此

  holder.imageAttach.setImageURI(uri)

答案 2 :(得分:0)

您只需删除调整大小(200,200)并仅使用fit()。

Picasso.with(this).load(uri).fit().into(holder.imageAttach);