2016-05-31 10 views
1

Ich habe eine Funktion für meine Android-App erstellt, mit der Benutzer Bilder aus der Galerie durchsuchen und importieren können. Aber die App stürzt immer ab, wenn ein normales oder ein größeres Bild importiert wird, aber es stürzt nicht ab, wenn ich sehr kleine Bilder importiere. Ich möchte, dass der Benutzer normal große Bilder mit Leichtigkeit und guter Geschwindigkeit importieren kann. Hier ist mein Code:Normale Bilder können nicht aus der Galerie importiert werden

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_in_card); 
    openGallery(); 
} 

private void openGallery() { 
     Intent intent = new Intent(); 
     // Show only images, no videos or anything else 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     // Always show the chooser (if there are multiple options available) 
     startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.str_select_pic_gallery)), PICK_IMAGE_REQUEST); 
    } 


protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 

      Uri uri = data.getData(); 
      try { 
       Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); 
       setPicture(bitmap); 
       // Log.d(TAG, String.valueOf(bitmap)); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

@TargetApi(android.os.Build.VERSION_CODES.JELLY_BEAN) 
private void setPicture (Bitmap b) { 
      BitmapDrawable drawable; 
      if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
       drawable = new BitmapDrawable(getResources(), b); 
       wholeImage.setBackgroundDrawable(drawable); 
      } else { 
       drawable = new BitmapDrawable(getResources(), b); 
       wholeImage.setBackground(drawable); 
      } 
    } 

Allerdings ist es nicht in dem Emulator zum Absturz bringen, aber es tut auf jedem Handy. Daher kann ich den Fehlercode nicht finden, da er nicht in der Protokolldatei gedruckt wird.

+0

Verwenden Sie LogCat, um die Java-Stack-Ablaufverfolgung für Ihren Absturz zu untersuchen: https://stackoverflow.com/questions/23353173/universe-myapp-has-stopped-how-can-i-solve-this – CommonsWare

+0

Können Sie Ihre veröffentlichen hier einloggen? –

+0

Es stürzt nicht im Emulator ab, aber es tut auf jedem Telefon. Was mache ich jetzt? – AES

Antwort

1

Eine zu große Bitmap-Größe Ergebnis in Ihre Crash error.My Lösung ist:

ContentResolver resolver = getContentResolver(); 
BitmapFactory.Options options = new BitmapFactory.options(); 
options.inJustDecodeBounds = false; 
options.inSampleSize = 4; // now you resize bitmap as 0.25 as before 
Bitmap mBitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(mPhotoUri),null,options); 

Hoffe, es kann Ihnen helfen.

+0

Vielen Dank. Dieser Code funktioniert wie ein Zauber! Es hat das Problem gelöst. – AES

0

Sie können BitmapFactory verwenden.

public void openGallery(View view) { 
    // Create intent to Open Image applications like Gallery, Google Photos 
    Intent galleryIntent = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    // Start the Intent 
    startActivityForResult(galleryIntent, RESULT_LOAD_IMG); 
} 

... löschen Sie die openGallery() -Methode in onCreate();: die Optionen für Bitmap-Größe

+0

Wie verwende ich es für meinen Code? – AES

0

Versuch zu tauschen openGallery() -Methode gegen verwendet werden