Изображения не отображаются в галерее после загрузки - PullRequest
1 голос
/ 30 апреля 2020

В настоящее время я использую библиотеку Picasso для загрузки изображений и сохранения их на устройстве при нажатии кнопки. проблема в том, что когда я нажимаю кнопку, изображение сохраняется в хранилище, но не отображается в галерее, так как я могу это исправить? Вот мой код , я долго искал решение этой проблемы, но не нашел вещей

PicassoImagesAdapter. java

/*
 * This class for display the image when click on it
 * It is get the data from the class have the images "Images in ArrayList"
 */
public class PicassoDisplayImageAdapter extends AppCompatActivity {

public static final int PERMISSION_WRITE = 0;
String fileUri;
Button download_image,back_icon;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_image);

    /* Display the data in the ImageView with Picasso "ImageView that insert in he activity" */
    final ImageView imageView = findViewById(R.id.image_display);
    final Intent intent = getIntent();
    if (intent.hasExtra("imageUrl")){
        String url = intent.getStringExtra("imageUrl");
        Picasso
                .with(this)
                .load(url)
                .error(R.drawable.error)
                .into(imageView);
    }

    /* button to download the image */
    download_image = findViewById(R.id.button_download);
    checkPermission();
    download_image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (checkPermission()) {
                String URL = intent.getStringExtra("imageUrl");
                SaveImage (URL);
            }
        }
    });
}

/* method to save image*/
private void SaveImage(String url) {
    Picasso.with(getApplicationContext()).load(url).into(new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            try {
                File mydir = new File(Environment.getExternalStorageDirectory() + "/MoamenApp");
                if (!mydir.exists()) {
                    mydir.mkdirs();
                }

                fileUri = mydir.getAbsolutePath() + File.separator + System.currentTimeMillis() + ".jpg";
                FileOutputStream outputStream = new FileOutputStream(fileUri);

                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
                outputStream.flush();
                outputStream.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
            Toast.makeText(getApplicationContext(), "download compelete", Toast.LENGTH_LONG).show();
        }
        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
        }
        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
        }
    });
}

/* runtime storage permission */
public boolean checkPermission() {
    int READ_EXTERNAL_PERMISSION = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE);
    if((READ_EXTERNAL_PERMISSION != PackageManager.PERMISSION_GRANTED)) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_WRITE);
        return false;
    }
    return true;
}

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode==PERMISSION_WRITE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        //do somethings
    }
}
}

ImagesRamadanActivity. java с данными

/*
 * This Activity for display the ramadan images
 * This class has the data of images
*/
public class ImagesRamadanActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ramadan_images);

/* ArrayList for RamadanImages */
final String[] RamadanImages = {
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
    "https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg",
 };

 /* make new object and find the view "GridView" */
 GridView gridView2 = findViewById(R.id.gridview_image_ramadan);
 // display all the images from Array on it
gridView2.setAdapter(new PicassoImagesAdapter(ImagesRamadanActivity.this, 
RamadanImages));

/* display the image when click on it */
// we made a class for this method "the class called 
PicassoDisplayImageAdapter"
gridView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long 
 id) {
    // get the image
    String image = RamadanImages[position];
    Intent intent = new Intent(ImagesRamadanActivity.this, 
    PicassoDisplayImageAdapter.class);
    intent.putExtra("imageUrl", image);
    ImagesRamadanActivity.this.startActivity(intent);
  }
 });

1 Ответ

0 голосов
/ 30 апреля 2020

У вас есть две ситуации:

  1. Если растровое изображение сохраняется в папке и его размер не равен 0 байтам, убедитесь, что файл .nomedia не находится в этой папке. поскольку MediaManager не проверяет папки, содержащие .nomedia файлов.
  2. Если программа не сохраняет растровое изображение, ошибка checkPermission() записывается следующим образом:
if (ContextCompat.checkSelfPermission(this, "android.permission.WRITE_EXTERNAL_STORAGE") != 0) { ActivityCompat.requestPermissions(this, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, PERMISSION_WRITE);}

Введите следующий код в файл AndroidManifest. xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Затем убедитесь, что растровое изображение сохранено, и, если файл существует, он появится в галерее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...