loopj - асинхронный Http-клиент Android загружает изображение из drawable

Я пытаюсь отправить изображение из веб-службы, доступной для рисования, с помощью асинхронного http-клиента Android. Эта ссылка показывает, как отправить путь использования изображения,

Загрузка изображения из Android (с асинхронным HTTP-клиентом Android) на сервер rails (со скрепкой)

Можно ли отправить изображение из drawable? Я уже посмотрел из Android Asynchronous Http Client о том, как отправить байтовое изображение, но в моем код, он постоянно возвращает ошибку, что изображение отсутствует. Вот мой код

            RequestParams params = new RequestParams();

            username = editTextEmail.getText().toString();
            name = editTextName.getText().toString();
            password = editTextPassword.getText().toString();
            phone = editTextPhone.getText().toString();

            Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.ic_user);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            image.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            imageInByte = stream.toByteArray();

            if(isOnline()){
                params.put("email", username);
                params.put("name", name);
                params.put("password", password);
                params.put("phone", phone);
                params.put("picture", new ByteArrayInputStream(imageInByte), "user.jpg");
                invokeWS(params);
                return true;
            }

Может кто-нибудь помочь мне? Спасибо перед


person mrconga    schedule 30.12.2014    source источник


Ответы (1)


Да, можно отправить изображение из drawable, но вы должны преобразовать свое изображение в строку base64 следующим образом:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);          
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want.
byte [] byte_arr = stream.toByteArray();
String image_str = Base64.encodeToString(byte_arr, Base64.DEFAULT);

а затем отправить строку на сервер:

params.put("image", image_str);

Подробнее см. здесь приложение Android для отправки изображения в MySQL

person Josef    schedule 30.12.2014