Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)

I am trying to perform an animation on a button click.. the steps are as follows on button click..

  1. the button image changes
  2. an animation plays
  3. next layout is displayed..

But am getting an out of memory exception..

When the animation file was not added to the project there was no error. But since the addition of the anime there is the problem.

I am using 3 class files here(home_screen, button_anime and home)

home_screen.java receives the button click information, changes the button image and transfers to button_anime class the animation file is initiated in the button_anime.java and after anime plays next layout is displayed from home.java

The log cat is as follows..

 E/AndroidRuntime(1255): java.lang.OutOfMemoryError
 E/AndroidRuntime(1255):    at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
 E/AndroidRuntime(1255):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)
 E/AndroidRuntime(1255):    at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)
 E/AndroidRuntime(1255):    at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)
 E/AndroidRuntime(1255):    at android.content.res.Resources.loadDrawable(Resources.java:2110)
 E/AndroidRuntime(1255):    at android.content.res.Resources.getDrawable(Resources.java:700)
 E/AndroidRuntime(1255):    at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282)
 E/AndroidRuntime(1255):    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:937)
 E/AndroidRuntime(1255):    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
 E/AndroidRuntime(1255):    at android.content.res.Resources.loadDrawable(Resources.java:2092)
 E/AndroidRuntime(1255):    at android.content.res.Resources.getDrawable(Resources.java:700)
 E/AndroidRuntime(1255):    at android.view.View.setBackgroundResource(View.java:15303)
 E/AndroidRuntime(1255):    at com.quinoid.thomasinternational.Button_Anime.onCreate(Button_Anime.java:19)
 E/AndroidRuntime(1255):    at android.app.Activity.performCreate(Activity.java:5231)
 E/AndroidRuntime(1255):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
 E/AndroidRuntime(1255):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
 E/AndroidRuntime(1255):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
 E/AndroidRuntime(1255):    at android.app.ActivityThread.access$800(ActivityThread.java:135)
 E/AndroidRuntime(1255):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
 E/AndroidRuntime(1255):    at android.os.Handler.dispatchMessage(Handler.java:102)
 E/AndroidRuntime(1255):    at android.os.Looper.loop(Looper.java:136)
 E/AndroidRuntime(1255):    at android.app.ActivityThread.main(ActivityThread.java:5017)
 E/AndroidRuntime(1255):    at java.lang.reflect.Method.invokeNative(Native Method)
 E/AndroidRuntime(1255):    at java.lang.reflect.Method.invoke(Method.java:515)
 E/AndroidRuntime(1255):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
 E/AndroidRuntime(1255):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
 E/AndroidRuntime(1255):    at dalvik.system.NativeStart.main(Native Method)

My home_screen.java

home.setOnClickListener(new OnClickListener() { <-- error happens somewhere here

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Bitmap b = BitmapFactory.decodeResource(getResources(),R.drawable.home1);
        Drawable d = new BitmapDrawable(getResources(),b); 
        home.setBackgroundDrawable(d); <-- this dose not work..
        Intent myIntent = new Intent(Home_Screen.this, Button_Anime.class);
        startActivity(myIntent);
    }
});
like image 911
user3214173 Avatar asked Jun 10 '14 06:06

user3214173


1 Answers

_img is your imageview. you have to decode your image and set its size like below i am doing.

 File imgFile = new File(_path); // path of your file
    if (imgFile.exists()) {
        FileInputStream fis = new FileInputStream(imgFile);
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 8;
        options.inPurgeable = true;
        options.inScaled = true;
        Bitmap bm = BitmapFactory.decodeStream(fis, null,options);
       _img.setImageBitmap(bm);
like image 161
Pankaj Arora Avatar answered Nov 02 '22 07:11

Pankaj Arora