Friends,
I am using this function to decode my bitmap
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;
}
I got this from a post on SO long back. This is working fine on Nexus, but crashing on Samsung
phones...I call this in an async task but still its givign me a crash...here is the trace of the exception:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.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 android.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 android.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 android.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 android.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 android.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 android.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