Невозможно передать строку Base64 с объектом с помощью Retrofit

Я кодирую изображение, используя следующий метод:

 Bitmap bm = BitmapFactory.decodeFile(mCurrentPhotoPath);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
    byte[] byteArrayImage = baos.toByteArray();
    encodedImage = Base64.encodeToString(byteArrayImage, Base64.DEFAULT);`

Я отправляю данные с помощью модификации следующим образом:

newFoodModel = new NewFoodModel(food_name,food_unit,food_price,encodedImage,providerId,foodCategoryId);

        Call<ServiceResponse>serviceResponseCall = uploadFoodApi.getResponseResult(newFoodModel);
        serviceResponseCall.enqueue(new Callback<ServiceResponse>() {
            @Override
            public void onResponse(Call<ServiceResponse> call, Response<ServiceResponse> response) {
                if(response.code() == 200){
                    ServiceResponse serviceResponse = response.body();
                    Toast.makeText(AddFoodActivity.this, serviceResponse.getMessage(), Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(AddFoodActivity.this, response.code()+","+response.message(), Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<ServiceResponse> call, Throwable t) {
                Toast.makeText(AddFoodActivity.this, "Check connection", Toast.LENGTH_SHORT).show();
            }
        });

Я не знаю, где я делаю неправильно, ответ сервера - код ошибки: 500, внутренняя ошибка сервера.

мой класс модели ответа:

public class ServiceResponse {
    @SerializedName("ResultState")
    @Expose
    private Boolean resultState;
    @SerializedName("Message")
    @Expose
    private String message;

    public Boolean getResultState() {
        return resultState;
    }

    public void setResultState(Boolean resultState) {
        this.resultState = resultState;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

интерфейс, который обрабатывает запрос:

public interface UploadFoodApi {
    @POST("after_part_of_base_url")
    Response<ServiceResponse> getResponseResult(@Body NewFoodModel newFoodModel);
}

person hasan    schedule 30.01.2017    source источник
comment
отредактируйте пост, вместо этого поместите модель ServiceResponse ..   -  person ZeroOne    schedule 30.01.2017
comment
Вы пробовали использовать Postman? если почтальон работает, это может быть проблема с вашим объектом   -  person ZeroOne    schedule 30.01.2017
comment
почтальон работает   -  person hasan    schedule 30.01.2017
comment
@ZeroOne я добавил класс ServiceRespnse   -  person hasan    schedule 30.01.2017
comment
serviceResponseCall = uploadFoodApi.getResponseResult(newFoodModel);. Интересно, что вы пытаетесь получить с помощью getResponseResult. Ваш вызов еще не поставлен в очередь, и onResponse будет запущен намного позже.   -  person greenapps    schedule 30.01.2017
comment
Call< NewFoodModel> call, Response<ServiceResponse> ответ, попробуйте это..   -  person ZeroOne    schedule 30.01.2017
comment
тогда, как я должен enque запрос?   -  person hasan    schedule 30.01.2017
comment
следуйте этому. /а>   -  person ZeroOne    schedule 30.01.2017
comment
я не вижу никакой разницы между выбранным ответом по этой ссылке и кодом, который я разместил!   -  person hasan    schedule 30.01.2017


Ответы (1)


Изображение не загружалось из-за размера изображения, до этого:

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream );// image quality was kept 100%

Я решил проблему, уменьшив качество,

bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream ); //it is now scaled down to 80% of original image.
person hasan    schedule 01.02.2017