java.lang.OutOfMemoryError在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法) [英] java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)

查看:924
本文介绍了java.lang.OutOfMemoryError在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想点击一个按钮进行动画..的步骤如下
上按一下按钮。


  1. 按钮图像变化

  2. 动画播放

  3. 显示下一个布局。

但我得到一个内存不足的异常。

在动画文件中不添加到项目中没有错误。但由于增加了动漫的有问题。

我在这里使用3类文件(home_screen,button_anime和家庭)

home_screen.java接收点击该按钮信息,按钮图像和转让变为button_anime类动画文件在button_anime.java发起和动画播放下一个布局是从home.java后显示

日志猫如下..

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

我home_screen.java

  home.setOnClickListener(新OnClickListener(){<  - 错误发生在这里的某个地方    @覆盖
    公共无效的onClick(视图v){
        // TODO自动生成方法存根
        位图B = BitmapFactory.de codeResource(getResources(),R.drawable.home1);
        可绘制D =新BitmapDrawable(getResources(),B);
        home.setBackgroundDrawable(四); < - 这个剂量不会工作。
        意图myIntent =新意图(Home_Screen.this,Button_Anime.class);
        startActivity(myIntent);
    }
});


解决方案

_img是您的ImageView的。你必须去code你的形象,并设置其大小类似下面我所做的一切。

 文件imgFile =新的文件(_path); //你的文件路径
    如果(imgFile.exists()){
        FIS的FileInputStream =新的FileInputStream(imgFile);
        BitmapFactory.Options选项=新BitmapFactory.Options();
        options.inSampleSize = 8;
        options.inPurgeable = TRUE;
        options.inScaled = TRUE;
        位图BM = BitmapFactory.de codeStream(FIS,空,期权);
       _img.setImageBitmap(BM);

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

解决方案

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

这篇关于java.lang.OutOfMemoryError在android.graphics.BitmapFactory.nativeDe $ C $检测板(本机方法)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆