2012-07-12 134 views
1

我在我的Android應用程序中嘗試使用17位圖像作爲位圖。但是,當我嘗試啓動此活動時,它將返回java.lang.OutOfMemoryError。我真的無法解決這個問題。任何人都可以有一個確切的解決方案嗎?我的onCreate()如下。謝謝。使用位圖圖像生成OutOfMemoryError

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.seviyor); 

    activityHead=(ImageView) findViewById(R.id.activityhead1); 
    shake = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
    Options options=new Options(); 
    options.inSampleSize=1; 
    for(int i=0;i<17;i++){ 
     bmImages[i]=BitmapFactory.decodeResource(getResources(),drwbles[i] , options); 
    } 

    initilizeToastBackground(); 
    initilizeButtonsFor16Leafs(); 
    initilize16Lisener(); 

    resultIntent=new Intent(this,ResultFrame.class); 
    fortuneCon=16; 
    for(int i=0;i<17;i++){ 
     leafs[i]=(ImageView) findViewById(leafIDs[i]); 
    } 
    for(int i=0;i<17;i++){ 
     leafs[i].setImageBitmap(bmImages[i]); 
    } 


    Bundle frompreviousInent=getIntent().getExtras(); 
    categoryName=frompreviousInent.getString("category"); 
    setHeadOfActivity(); 
} 

,這是我的logcat ...

07-12 15:21:11.465: E/AndroidRuntime(23419): FATAL EXCEPTION: main 

07-12 15:21:11.465: E/AndroidRuntime(23419): java.lang.OutOfMemoryError 

07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.Bitmap.nativeCreate(Native Method) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.Bitmap.createBitmap(Bitmap.java:605) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.Bitmap.createBitmap(Bitmap.java:551) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:437) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.BitmapFactory.finishDecode(BitmapFactory.java:618) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:593) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:468) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at com.done.SS.onCreate(SS.java:65) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.app.Activity.performCreate(Activity.java:4562) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.app.ActivityThread.access$600(ActivityThread.java:128) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.os.Looper.loop(Looper.java:137) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at android.app.ActivityThread.main(ActivityThread.java:4514) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at java.lang.reflect.Method.invokeNative(Native Method) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at java.lang.reflect.Method.invoke(Method.java:511) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 
07-12 15:21:11.465: E/AndroidRuntime(23419): at dalvik.system.NativeStart.main(Native Method) 
+0

請張貼logcat的輸出 – 2012-07-12 12:20:07

+2

重複:http://stackoverflow.com/questions/11447409/java-lang -outofmemoryerror-in-my-android-application/11447773#11447773 – 2012-07-12 12:21:06

+0

調試你的代碼並開始在[this]上進行通信(http://stackoverflow.com/questions/11447409/java-lang-outofmemoryerror-in-my-android-應用程序/ 11447773#11447773)你在早上問。所以你應該刪除這個問題,否則管理確定關閉這個問題 – 2012-07-12 12:26:12

回答

1

你需要他們的全尺寸?嘗試設置options.inSampleSize = 8。或至少2或4.

我懷疑與17圖像,這可能是不夠的。

另一種解決方案是查詢圖像,並讓他們爲縮略圖到你的活動:

Uri tUri = MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI; // Where thumbnails are stored 
String[] columns = { MediaStore.Images.ImageColumns._ID, 
        MediaStore.Images.ImageColumns.DATE_TAKEN,MediaStore.Images.ImageColumns.DISPLAY_NAME}; 

Cursor thumbCursor = this.managedQuery(tUri, null, null, null, null); // May need to use more paramaters to get 
                     // exactly the images you need 
int i = 0; 
if (thumbCursor.moveToFirst() && thumbCursor.getCount() == 17) 
{ 
    do 
    { 
     int columnIndex = thumbCursor.getColumnIndex(MediaStore.Images.Thumbnails.DATA); 
     String filePath = thumbCursor.getString(columnIndex); 
     Bitmap bitmap = BitmapFactory.decodeFile(filePath); 
     leafs[i]=(ImageView) findViewById(leafIDs[i]); 
     leafs[i].setImageBitmap(bitmap); 
     i++; 
    } 
    while(thumbCursor.moveToNext()); 
    thumbCursor.close(); 
}