После следующей части this tutorial и second answer of this question in SO мне удалось сохранить фотографию, которую я выбрал из своей галереи, в мой объект в Parse.Сохраните изображение из галереи Android-телефона в Parse - Не удается сохранить .jpg Фотографии
Проблема заключается в том, что фотография, которую я спас имеет .PNG расширение (это было просто скриншот). Когда я попытался выбрать обычную фотографию из папки камеры, ничего не было сохранено и произошло исключение.
Расширение всех остальных фотографий является .jpgНЕ .jpeg.
Из-за этого я попытался установить операторы if
, чтобы я мог проверить тип фотографии. Результатом следующего кода является то, что когда я выбираю .JPG фото, тип данных: NULL
.
Но как я могу сохранить фотографии .jpg в моем анализируемом объекте?
В моей деятельности у меня есть 2 кнопки. когда вы нажимаете первый (sign_in
), есть слушатель, который правильно выполняет все проверки других данных на моей странице, а затем, если все данные в порядке, он вызывает функцию (postData()
), в которой будет выполнен сохранение для анализа через объекты.
Вторая кнопка о добавлении фотографии из галереи. В моем .java деятельности, у меня есть точный слушатель:
picture.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), GET_FROM_GALLERY);
}
});
Это функция, что она вызывается из onClick
функции кнопки:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//Detects request codes
if(requestCode==GET_FROM_GALLERY && resultCode == Activity.RESULT_OK) {
Uri selectedImage = data.getData();
selectedImageType =data.getType();
Toast.makeText(SignUpActivity.this, "Type: "+selectedImageType,
Toast.LENGTH_SHORT).show();
try {
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
// Convert it to byte
ByteArrayOutputStream stream = new ByteArrayOutputStream();
// Compress image to lower quality scale 1 - 100
if (selectedImageType == "JPEG"){
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
// bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
image = stream.toByteArray();
}
else if (selectedImageType == "JPG" || selectedImageType == "jpg"){
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
// bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
image = stream.toByteArray();
}
else if (selectedImageType == "PNG") {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
// bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
image = stream.toByteArray();
}
else{
Toast.makeText(SignUpActivity.this, "Please pick a JPEG or PNG photo!",
Toast.LENGTH_SHORT).show();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
И это функция, которая сохраняет данные:
public void postData(final String username,final String password,final String email,final String gender,final String age) {
ParseObject user = new ParseObject("users");
user.put("username", username);
user.put("password", password);
user.put("email", email);
user.put("gender", gender);
user.put("age_category", age);
user.put("admin", false);
ParseFile file = null;
if (selectedImageType == "JPEG"){
file = new ParseFile("profile_picture.jpeg", image);
}
else if (selectedImageType == "JPG" || selectedImageType == "jpg"){
file = new ParseFile("profile_picture.jpg", image);
}
else if (selectedImageType == "PNG"){
file = new ParseFile("profile_picture.png", image);
}
else{
// Show a simple toast message
Toast.makeText(SignUpActivity.this, "Please pick a JPEG or PNG photo!",
Toast.LENGTH_SHORT).show();
}
// Upload the image into Parse Cloud
file.saveInBackground();
user.put("photo", file);
// Create the class and the columns
user.saveInBackground();
// Show a simple toast message
Toast.makeText(SignUpActivity.this, "Image Uploaded",
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(SignUpActivity.this, LoginActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.push_down_in, R.anim.push_down_out);
//finish();
}
После того, как у вас есть растровое изображение в OnActivityResult(), и вам нужно сохранить синтаксический анализ с помощью файла type =, просто скомпилируйте их все, используя «Format.JPEG». У меня есть приложение, которое выбирает контент вверх (jpg | png) и просто сохраняет все, чтобы проанализировать как «.jpg», и он отлично работает. –
Он отлично работает с любым типом. Не могли бы вы разместить свой ответ, чтобы принять его как правильно? То, что я сделал, было просто удалить все 'if's и сохранить изображение как .jpg. Кроме того, если бы вы могли сказать мне, как отображать это изображение в моем приложении, я был бы очень благодарен. Но большое спасибо за вашу помощь. – Marialena
Лучше использовать 'equalsIgnoreCase' вместо == –