2015-01-10 1 views
0

После следующей части this tutorial и second answer of this question in SO мне удалось сохранить фотографию, которую я выбрал из своей галереи, в мой объект в Parse.Сохраните изображение из галереи Android-телефона в Parse - Не удается сохранить .jpg Фотографии

enter image description here

Проблема заключается в том, что фотография, которую я спас имеет .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(); 
    } 
+0

После того, как у вас есть растровое изображение в OnActivityResult(), и вам нужно сохранить синтаксический анализ с помощью файла type =, просто скомпилируйте их все, используя «Format.JPEG». У меня есть приложение, которое выбирает контент вверх (jpg | png) и просто сохраняет все, чтобы проанализировать как «.jpg», и он отлично работает. –

+0

Он отлично работает с любым типом. Не могли бы вы разместить свой ответ, чтобы принять его как правильно? То, что я сделал, было просто удалить все 'if's и сохранить изображение как .jpg. Кроме того, если бы вы могли сказать мне, как отображать это изображение в моем приложении, я был бы очень благодарен. Но большое спасибо за вашу помощь. – Marialena

+0

Лучше использовать 'equalsIgnoreCase' вместо == –

ответ

1

удалить ваши, если заявления, которые пытаются отслеживать из «selectedImageType» на протяжении всего процесса создания растрового изображения и изображения Post to parse.com.

Как только у вас есть растровое изображение, вы можете просто указать все сжатие в «Bitmap.CompressFormat.JPEG», а затем просто разместить все jpg на parse.com.

+0

Большое спасибо, – Marialena

1

Так что .jpeg работает и .jpg нет? Как об этом, то (обратите внимание, вы не должны сравнивать строки с ==):

if (selectedImageType.toUpperCase().equals("JPEG") || selectedImageType.toUpperCase().equals("JPG")){ 
      file = new ParseFile("profile_picture.jpeg", image); 
     } 

Также вы можете объединить некоторые ранее код:

if (selectedImageType.toUpperCase().equals("JPEG") || selectedImageType.toUpperCase().equals("JPG")){ 
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
        image = stream.toByteArray(); 
       } 

 Смежные вопросы

  • Нет связанных вопросов^_^