Изображение загружается на сервер, но не отображается в приложении Imageview Android

Я создал функцию загрузки фотографий. Пользователь может сделать фото и выбрать фото из файла и загрузить его на сервер.

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

Я использую библиотеку Volley для отправки данных POST из моего приложения для загрузки фотографии и использую библиотеку Glide для загрузки и отображения этой фотографии в приложении.

Я даю небольшую часть моего кода, который связан с загрузкой и скачиванием фотографий. Помогите, пожалуйста, определить и решить проблему.

public void showDialog(){
        ........
        alertButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                alert.dismiss();
            }
        });

        alertListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // ListViekw Clicked item index
                if (position == 0) {

                        cameraIntent();

                }
                else if (position == 1){

                        galleryIntent();

                }
            }
        });
    }


    private void galleryIntent()
    {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        startActivityForResult(Intent.createChooser(intent, "Select File"),SELECT_FILE);

    }

    public void cameraIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
            File cameraFolder;
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                cameraFolder = new File(Environment.getExternalStorageDirectory(), "image/");
            } else {
                cameraFolder = getActivity().getCacheDir();
            }
            if (!cameraFolder.exists()) {
                cameraFolder.mkdirs();
            }
            String imageFileName = System.currentTimeMillis() + ".jpg";
            File photoFile = new File(cameraFolder + imageFileName);
            currentPhotoPath = photoFile.getAbsolutePath();
            if (photoFile != null) {
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile));
                startActivityForResult(takePictureIntent, REQUEST_CAMERA);
            }
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_FILE){
                onSelectFromGalleryResult(data);

            }

            else if (requestCode == REQUEST_CAMERA) {
                if (!TextUtils.isEmpty(currentPhotoPath)) {
                    galleryAddPic();
                    onCaptureImageResult();
                }
            }
        }
    }

    private void galleryAddPic() {
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        File f = new File(currentPhotoPath);
        Uri contentUri = Uri.fromFile(f);
        mediaScanIntent.setData(contentUri);
        this.getActivity().sendBroadcast(mediaScanIntent);
    }

    private void onCaptureImageResult() {
        Bitmap bitmap = getBitmapFromPath(currentPhotoPath, 200, 200);
        image.setImageBitmap(bitmap);
        compressBitMap(bitmap);
    }

    private void onSelectFromGalleryResult(Intent data) {
        ...
    }


    private void compressBitMap(Bitmap bitmap) {
       ...
    }

    public static Bitmap getBitmapFromPath(String photoPath, int targetW, int targetH) {
        ....
    }

    private void uploadImage(final byte[] bytesArray){


    }

}

person tamrezh21    schedule 19.09.2017    source источник


Ответы (2)


Распространенной ошибкой при загрузке изображения на сервер является использование того же URL-адреса для нового изображения. В этом случае glide будет использовать предыдущее изображение, которое уже кэшировано. Есть 2 решения:

  1. хорошее решение - сервер должен использовать отметку времени в URL-адресе, назначенном изображению.
  2. плохое решение - пропустить кэш с помощью glide (skipMemoryChache()).
person Community    schedule 19.09.2017
comment
Я привязал второй (плохое решение), но он вообще не работает. могли бы, пожалуйста, объяснить немного больше о лучшем решении. Это было бы очень полезно для меня. Я застрял с этим isse со вчерашнего дня. Я все еще очень новичок в разработке Android. - person tamrezh21; 19.09.2017
comment
Есть ли способ заменить предыдущее изображение, когда я загружаю новое изображение, - person tamrezh21; 19.09.2017
comment
Первое решение находится внутри сервера — когда сервер назначает URL-адрес для изображения, вы, вероятно, используете в нем идентификатор пользователя, верно? Затем укажите время, может быть, что-то вроде этого: http:/mydomain/uploadimage&user=userid&time=20170920183312 - person ; 20.09.2017

вы вошли в нулевую позицию списка, поэтому он отображает старое изображение.

person Pragadish Waran    schedule 19.09.2017