2016-05-31 12 views
1

私は自分のアンドロイドアプリのために、ユーザーがギャラリーから画像をブラウズしてインポートできるようにしました。しかし、通常のサイズの画像や大きなサイズの画像をインポートすると常にクラッシュしますが、非常に小さい画像をインポートするとクラッシュしません。私は、ユーザーが普通の大きさの画像を簡単かつ高速に読み込むことができるようにしたい。ここに私のコードです:ギャラリーから通常サイズの画像をインポートできません

@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); 
      } 
    } 

は、しかし、それはエミュレータでクラッシュしていませんが、それはすべての携帯電話に行います。だから私はエラーコードを見つけることができないので、ログcatで印刷されていません。

+0

LogCatを使用して、クラッシュに関連するJavaスタックトレースを調べます。https://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this – CommonsWare

+0

ここにログする? –

+0

エミュレータでクラッシュすることはありませんが、すべての電話で発生します。今私は何をしますか? – AES

答えて

1

大きすぎるビットマップのサイズの結果は次のとおりです。

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); 

それはあなたを助けることができると思います。

+0

ありがとうございました。このコードは魅力のように機能します!それは問題を解決しました。 – AES

0

BitmapFactoryを使用できます。そのオプションは、ビットマップのサイズ

+0

私のコードにどのように使用しますか? – AES

0

に対するopenGallery()メソッド交換しようとするために使用することができますのonCreateでopenGallery()メソッドを(削除...

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); 
} 

を)。あなたのクラッシュerror.My溶液中

関連する問題