我正试图在我的程序中获取我的画廊照片。我可以通过使用以下代码来做同样的事情:
要打开图库:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent,1);
并返回结果并显示所选图像:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
{
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode)
{
case SELECT_PHOTO:
if(resultCode == RESULT_OK)
{
Uri selectedImage = imageReturnedIntent.getData();
InputStream imageStream = null;
try
{
imageStream = getContentResolver().openInputStream(imageReturnedIntent.getData());
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
selectedContactPicture = BitmapFactory.decodeStream(imageStream);
setContactPicture.setBackgroundDrawable(new BitmapDrawable(selectedContactPicture));
}
}
}
它第一次正常工作。但如果我从我的画廊中选择另一张照片,我的应用程序就会崩溃。请帮助我们解决这个问题。
logcat的:
05-08 10:45:12.180: E/AndroidRuntime(16782): FATAL EXCEPTION: main
05-08 10:45:12.180: E/AndroidRuntime(16782): java.lang.OutOfMemoryError
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:499)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:555)
05-08 10:45:12.180: E/AndroidRuntime(16782): at com.deepsa.apps.callfaker.MainActivity.onActivityResult(MainActivity.java:89)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.app.Activity.dispatchActivityResult(Activity.java:4649)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.app.ActivityThread.deliverResults(ActivityThread.java:2996)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3043)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.app.ActivityThread.access$1100(ActivityThread.java:127)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1188)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.os.Handler.dispatchMessage(Handler.java:99)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.os.Looper.loop(Looper.java:137)
05-08 10:45:12.180: E/AndroidRuntime(16782): at android.app.ActivityThread.main(ActivityThread.java:4441)
05-08 10:45:12.180: E/AndroidRuntime(16782): at java.lang.reflect.Method.invokeNative(Native Method)
05-08 10:45:12.180: E/AndroidRuntime(16782): at java.lang.reflect.Method.invoke(Method.java:511)
05-08 10:45:12.180: E/AndroidRuntime(16782): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
05-08 10:45:12.180: E/AndroidRuntime(16782): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
05-08 10:45:12.180: E/AndroidRuntime(16782): at dalvik.system.NativeStart.main(Native Method)
由于
答案 0 :(得分:1)
正如我评论的那样,它没有内存错误,使用inSampleSize()
将比例缩放版本的位图加载到内存中
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
{
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode)
{
case SELECT_PHOTO:
if(resultCode == RESULT_OK)
{
Uri selectedImage = imageReturnedIntent.getData();
InputStream imageStream = null;
try
{
imageStream = getContentResolver().openInputStream(imageReturnedIntent.getData());
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize =8;
selectedContactPicture = BitmapFactory.decodeStream(imageStream,null,options);
setContactPicture.setBackgroundDrawable(new BitmapDrawable(selectedContactPicture));
}
}
}
答案 1 :(得分:0)
像那样使用
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent resultData) {
super.onActivityResult(requestCode, resultCode, resultData);
if (isCameraOrGallery == 2 && resultData != null) {
Uri selectedImage = resultData.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
uploadImagePath = cursor.getString(columnIndex);
bitmapUploadImage = BitmapFactory.decodeFile(uploadImagePath);
profileImageView.setImageBitmap(bitmapUploadImage);
cursor.close();
} catch (Exception ex) {
}
}