Как отправить объект изображения на сервер с помощью дооснащения в Android - PullRequest
0 голосов
/ 12 апреля 2019

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

private void uploadProfileImage(){
    uid = DatabaseUtil.getInstance().getUser().getProfile().getUmeta().getId();
    mRegProgress.setTitle("Updating profile Image");
    mRegProgress.setMessage("Please wait...");
    mRegProgress.setCanceledOnTouchOutside(false);
    mRegProgress.show();

    File profile_image_file = new File(mediaPath);

    RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), profile_image_file);
    MultipartBody.Part profile_image = MultipartBody.Part.createFormData("file", profile_image_file.getName(), requestBody);

    Call<ResponseBody> call = RetrofitClient.getInstance().getApi().uploadProfile(uid , profile_image);
    call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {

            if (response.code() == 200){
                mRegProgress.hide();
                String s  = response.body().toString();
                pDialog = new SweetAlertDialog(getActivity(), SweetAlertDialog.SUCCESS_TYPE);
                pDialog.setTitleText("Good job!");
                pDialog.setContentText("Profile image successfully!");
                pDialog.show();
            }else if (response.code() == 203){
                Toast.makeText(getActivity() , "Image upload Error" , Toast.LENGTH_SHORT).show();

            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            t.printStackTrace();
        }
    });
}

я тоже использую этот код ...

case SELECT_PROFILE_PIC:
    if (resultCode == RESULT_OK) {


        // Get the Image from data
        Uri selectedImage = data.getData();
        String[] filePathColumn = {MediaStore.Images.Media.DATA};

        Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
        assert cursor != null;
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        mediaPath = cursor.getString(columnIndex);

        // Set the Image in ImageView for Previewing the Media
            dd_profile_view.setImageBitmap(BitmapFactory.decodeFile(mediaPath));
        cursor.close();

        uploadProfileImage();
    }
    break;

это то, что я посылаю в моем коде

но изображение не обновляется ... я попробовал api на почтовом человеке, оно корректно обновляет картинку профиля ... пожалуйста, скажите мне, в чем проблема и как я могу ее решить Спасибо

вот мой api звонок ..

@Multipart
@POST("media/upload-media")
Call<ResponseBody> uploadProfile(
    @Query("id") String id,
    @Part MultipartBody.Part profile_image
);

Я добавляю репродукцию, получая от почты человека .. это закрытый ответ почтальона

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Попробуйте использовать @Part вместо @Query

@Multipart
@POST("media/upload-media")
Call<ResponseBody> uploadProfile(
        @Part("id") RequestBody id,
        @Part MultipartBody.Part profile_image
);

Заменить

RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), profile_image_file);

на:

RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), profile_image_file);

Вы можете перейти по этой ссылке для завершенияПояснение введите описание ссылки здесь

0 голосов
/ 12 апреля 2019

обновите ниже строки

 RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), profile_image_file);
 MultipartBody.Part profile_image = MultipartBody.Part.createFormData("file", profile_image_file.getName(), requestBody);

вместо этого

     RequestBody requestBody= RequestBody.create(MediaType.parse("image/*"), profile_image_file);
MultipartBody.Part profile_image = MultipartBody.Part.createFormData("file", profile_image_file.getName(), requestBody);
     RequestBody uid= RequestBody.create(MediaType.parse("text/plain"), uid);

И убедитесь, что вместо @ Query

@Multipart
@POST("media/upload-media")
Call<ResponseBody> uploadProfile(
        @Part("id") RequestBody id,
        @Part MultipartBody.Part profile_image
);
используется @part
...