有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓位图。压缩(Bitmap.CompressFormat.JPEG,100,baos)给我java。lang.OutOfMemoryError

朋友们

我正在使用此函数解码位图

public String BitMapToString(Bitmap bitmap){
            ByteArrayOutputStream baos=new  ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG,100, baos);
            byte [] b=baos.toByteArray();
            String temp=null;
            try{
            System.gc();
            temp=Base64.encodeToString(b, Base64.DEFAULT);
            }catch(Exception e){
                e.printStackTrace();
            }catch(OutOfMemoryError e){
                baos=new  ByteArrayOutputStream();
                bitmap.compress(Bitmap.CompressFormat.JPEG,50, baos);
                b=baos.toByteArray();
                temp=Base64.encodeToString(b, Base64.DEFAULT);
                Log.e("EWN", "Out of memory error catched");
            }
            return temp;
      }

我从很久以前的一个帖子里得到这个。这在Nexus上运行良好,但在三星上崩溃了 电话。。。我在异步任务中调用它,但它仍然会使我崩溃。。。以下是异常的跟踪:

java.lang.RuntimeException: An error occured while executing doInBackground()
at 安卓.os.AsyncTask$3.done in AsyncTask.java on Line 278
at java.util.concurrent.FutureTask$Sync.innerSetException in FutureTask.java on Line 273
at java.util.concurrent.FutureTask.setException in FutureTask.java on Line 124
at java.util.concurrent.FutureTask$Sync.innerRun in FutureTask.java on Line 307
at java.util.concurrent.FutureTask.run in FutureTask.java on Line 137
at 安卓.os.AsyncTask$SerialExecutor$1.run in AsyncTask.java on Line 208
at java.util.concurrent.ThreadPoolExecutor.runWorker in ThreadPoolExecutor.java on Line 1076
at java.util.concurrent.ThreadPoolExecutor$Worker.run in ThreadPoolExecutor.java on Line 569
at java.lang.Thread.run in Thread.java on Line 856
Caused by: java.lang.OutOfMemoryError
at java.lang.String.<init> in String.java on Line 375
at java.lang.String.<init> in String.java on Line 238
at 安卓.util.Base64.encodeToString in Base64.java on Line 456
at com.xxx.xxxx.activity.XXXActivity$SubmitData.BitMapToString in XXXActivity.java on Line 530
at com.xxx.xxxx.activity.XXXActivity$SubmitData.doInBackground in XXXActivity.java on Line 339
at com.xxx.xxxx.activity.XXXActivity$SubmitData.doInBackground in XXXActivity.java on Line 1
at 安卓.os.AsyncTask$2.call in AsyncTask.java on Line 264
at java.util.concurrent.FutureTask$Sync.innerRun in FutureTask.java on Line 305
... 5 more
java.lang.OutOfMemoryError
at java.lang.String.<init> in String.java on Line 375
at java.lang.String.<init> in String.java on Line 238
at 安卓.util.Base64.encodeToString in Base64.java on Line 456
at com.xxx.xxxx.activity.XXXActivity$SubmitData.BitMapToString in XXXActivity.java on Line 530
at com.xxx.xxxx.activity.XXXActivity$SubmitData.doInBackground in XXXActivity.java on Line 339
at com.xxx.xxxx.activity.XXXActivity$SubmitData.doInBackground in XXXActivity.java on Line 1
at 安卓.os.AsyncTask$2.call in AsyncTask.java on Line 264
at java.util.concurrent.FutureTask$Sync.innerRun in FutureTask.java on Line 305
at java.util.concurrent.FutureTask.run in FutureTask.java on Line 137
at 安卓.os.AsyncTask$SerialExecutor$1.run in AsyncTask.java on Line 208
at java.util.concurrent.ThreadPoolExecutor.runWorker in ThreadPoolExecutor.java on Line 1076
at java.util.concurrent.ThreadPoolExecutor$Worker.run in ThreadPoolExecutor.java on Line 569
at java.lang.Thread.run in Thread.java on Line 856

共 (1) 个答案