Изображения не отображаются должным образом в списке просмотра в Android - PullRequest
0 голосов
/ 27 апреля 2018

Я загружаю несколько вложений, а затем записываю изображения в SDCard, но моя проблема в том, что при отображении изображения с SDCAD в списке, показывающем половину черного изображения, я использую Picasso Image Loader для показа изображений с SDCARD. У меня такая же проблема с загрузчиком изображений. смотреть скриншот enter image description here

Примечание: изображение загружается правильно, когда я вижу его в 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();
}

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Я думаю, что ваши изображения загружаются неправильно. Я бы предложил Позволить 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);
0 голосов
/ 27 апреля 2018

Вы просто удаляете resize (200 200) и используете только fit ().

Picasso.with(this).load(uri).fit().into(holder.imageAttach);
0 голосов
/ 27 апреля 2018

попробуйте добавить android:scaleType="fitXY" к вашему ImageView .

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

замените просто используйте это

  holder.imageAttach.setImageURI(uri)
...