У меня есть эта активность, в которой пользователь может выбрать одно изображение из галереи или просто сделать снимок и (вместе с другими данными) загрузить его на сайт.Проблемы с загрузкой изображения
До сих пор я столкнулся 2 разные проблемы:
1) Если я пытаюсь его с картинкой из галереи, я получаю IOException с сообщением /внешние/изображения/СМИ/2305: открытой failed: ENOENT (Нет такого файла или каталога) Это происходит, когда дело доходит до открытия потока файлов.
2) Если я пытаюсь его фотосъемке, она идет хорошо, но строка в кодировке данных состоит из «AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA» (на самом деле больше, но только), и я предполагаю, что это не очень хороший знак. Это только предположение, поскольку я до сих пор не могу загрузить его на веб-сайт, но разные картинки, показывающие одну и ту же строку данных, просто пахнут смешно.
Код здесь
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case TAKE_PICTURE:
if (resultCode == Activity.RESULT_OK) {
//Uri selectedImage = imageUri;
loadImage(imageUri);
}
break;
case SELECT_PHOTO:
if(resultCode == Activity.RESULT_OK){
imageUri = data.getData();
loadImage(imageUri);
}
}
}
Это, как я загрузить изображение (либо взятый рис или из галереи) на ImageView. Он работает нормально.
public void loadImage(Uri selectedImage){
mActivity.getContentResolver().notifyChange(selectedImage, null);
ContentResolver cr = mActivity.getContentResolver();
Bitmap bitmap;
try {
bitmap = android.provider.MediaStore.Images.Media
.getBitmap(cr, selectedImage);
ivPicture.setImageBitmap(bitmap);
ivPicture.setVisibility(View.VISIBLE);
mActivity.croutonInfo(selectedImage.toString());
} catch (Exception e) {
mActivity.croutonAlert("Failed to load");
e("Camera " + e.toString());
}
}
Этот метод используется для извлечения данных. Когда я получаю API он будет иметь AsyncTask иметь дело с передачей HTTP, до сих пор он только помещает данные в объект передачи logicless
public void uploadTapa() throws IOException{
mActivity.croutonInfo("subiendo tapa ");
d("uploadTapa new ");
TapaUploadParametros tup = new TapaUploadParametros();
d("uploadTapa bar: " + nombreBar);
tup.setBarNombre(etBarName.getText().toString());
d("uploadTapa tapa: " + nombreTapa);
tup.setNombre(etTapaName.getText().toString());
d("uploadTapa municipio: " + municipio);
tup.setLocalidad(municipio);
d("uploadTapa provincia: " + provincia);
tup.setProvincia(provincia);
d("uploadTapa tipologiaId: " + tipologiaId);
tup.setTipo(tipologiaId);
d("uploadTapa precioId: " + precioId);
tup.setPrecio(precioId);
String encodedImage = encodeImgForHTTP(imageUri);
d("uploadTapa encoded image: " + encodedImage);
tup.setPic(encodedImage);
d("uploadTapa direccionBar: " + direccionBar);
tup.setBarDireccion(direccionBar);
}
И это метод кодирования изображения для передачи HTTP. Изображения из галереи не срабатывают сразу после «до открытия потока»
private String encodeImgForHTTP (Uri imageUri) throws IOException{
ContentResolver cr = mActivity.getContentResolver();
d("encodeImgForHTTP before opening stream ");
FileInputStream fis = new FileInputStream(imageUri.getPath());
d("encodeImgForHTTP after opening stream ");
// Get binary bytes for encode
byte[] imageBytes = new byte[fis.available()];
d("encodeImgForHTTP after getting byte array ");
// base 64 encode for text transmission (HTTP)
d("encodeImgForHTTP pre 64: " + imageBytes);
String data_string = Base64.encodeToString(imageBytes, Base64.URL_SAFE);
d("encodeImgForHTTP before returning the encoded data string " + data_string);
return data_string;
}
Что я делаю неправильно с изображениями галереи? Почему кодировка разных изображений выглядит одинаково?
Да, я более чем уверен (так как я полностью зеленый в файлах кодирования и т. д.), что там есть много возможностей для улучшения. Я просто хотел добиться этого, используя собственные ресурсы, поскольку большинство примеров, которые я нашел, использовали внешние библиотеки из apache и т. П. (И я уже использую немало в этом приложении). О фотографиях: мне нужно сохранить изображение, чтобы загрузить его? Недействительно временный uri, который я получаю от намерения камеры? – Frank
@Frank Я не помню временный URI от намерения камеры, но я скажу вам, что существует много несоответствий в отношении этого поведения захвата между устройствами. Например, вот проблема, с которой я столкнулся при попытке ее реализации: http://stackoverflow.com/questions/6390163/deleting-a-gallery-image-after-camera-intent-photo-taken/8555925#8555925 –
I ' m пытается выполнить этот фрагмент, и теперь он не будет реагировать на мою «проверку» после съемки рисунка. Экран остается на снимке. Он работает, если я нажимаю «X», чтобы отменить и вернуться к своей деятельности ... – Frank