简体   繁体   English

Android Switch语句崩溃

[英]Android Switch Statement Crashing

I created a switch statement in my android java file, the switch will set a drawable file to an imageView depending on the corresponding 'rating'. 我在android java文件中创建了一个switch语句,该开关将根据相应的“等级”将可绘制文件设置为imageView。 When it runs it crashes and says that it ran out of memory however I have allocated the virtual device 3000mb and the code runs fine until I input a value for the switch to compare 当它运行时崩溃,并说它用完了内存,但是我为虚拟设备分配了3000mb,并且代码运行良好,直到我输入了要比较的开关的值

Debugger Error Message 调试器错误消息

1752-1752/com.cs13ppz.virtualgallery E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.cs13ppz.virtualgallery, PID: 1752
    java.lang.OutOfMemoryError
            at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
            at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594)
            at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429)
            at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
            at android.content.res.Resources.loadDrawable(Resources.java:2110)
            at android.content.res.Resources.getDrawable(Resources.java:700)
            at android.widget.ImageView.resolveUri(ImageView.java:638)
            at android.widget.ImageView.setImageResource(ImageView.java:367)
            at com.cs13ppz.virtualgallery.ArtworkLibrary.ratingBar(ArtworkLibrary.java:55)
            at com.cs13ppz.virtualgallery.ArtworkLibrary.onCreate(ArtworkLibrary.java:18)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

Switch Statement ImageView ratingBar = (ImageView) findViewById(R.id.ratingbar); 切换语句 ImageView ratingBar =(ImageView)findViewById(R.id.ratingbar); int rating = 5; int等级= 5;

switch(rating){
    case 0: {
        ratingBar.setImageResource(R.drawable.star0);
    }
    case 1: {
        ratingBar.setImageResource(R.drawable.star05);
    }
    case 2: {
        ratingBar.setImageResource(R.drawable.star1);
    }
    case 3:
            ratingBar.setImageResource(R.drawable.star15);
            break;
    case 4:
            ratingBar.setImageResource(R.drawable.star2);
            break;
    case 5:
            ratingBar.setImageResource(R.drawable.star25);
            break;
    case 6:
            ratingBar.setImageResource(R.drawable.star3);
            break;
    case 7:
            ratingBar.setImageResource(R.drawable.star35);
            break;
    case 8:
            ratingBar.setImageResource(R.drawable.star4);
            break;
    case 9:
            ratingBar.setImageResource(R.drawable.star45);
            break;
    case 10:
            ratingBar.setImageResource(R.drawable.star5);
            break;
    }

By the way all the images that are being assigned to each case are very small, only about 15kb each. 顺便说一下,分配给每种情况的所有图像都非常小,每个图像仅约15kb。 I was also wondering if there would be an easier way to implement this? 我还想知道是否会有更简单的方法来实现这一目标?

The problem is not related with the switch per se, you are running out of memory due to the size of your images. 该问题与switch本身无关,由于图像的大小,您的内存不足。 Android process have a maximum amount of memory allocated to them by the OS (the heap). Android进程具有由操作系统(堆)分配给它们的最大内存量。 This memory has nothing to do with the storage space of the device. 此内存与设备的存储空间无关。

This answer shows heap sizes for some devices. 答案显示某些设备的堆大小。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM