Reputation:
I want to send images to the server for that I have to convert images into base 64 encoded String but gives me the Out of memory on a 7967328-byte allocation. exception not always but most of the time Maybe it happens because of large image size but i don't find a way to solve this problem here is my code which converts an image into base 64 String
public class ConvertImage1 {
public static String convert(String path){
InputStream inputStream = null;
try {
inputStream = new FileInputStream(path);
byte[] bytes;
byte[] buffer = new byte[8192];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
output.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
bytes = output.toByteArray();
String encodedString = Base64.encodeToString(bytes, Base64.DEFAULT);
return TextUtils.htmlEncode(encodedString);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
finally{
try {
inputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
return null;
}
}
Here is the Logcat
06-01 18:04:02.518: E/dalvikvm-heap(14027): Out of memory on a 7967328-byte allocation.
06-01 18:04:02.518: I/dalvikvm(14027): "AsyncTask #1" prio=5 tid=11 RUNNABLE
06-01 18:04:02.518: I/dalvikvm(14027): | group="main" sCount=0 dsCount=0 obj=0x419dd708 self=0x4f7fab30
06-01 18:04:02.518: I/dalvikvm(14027): | sysTid=14314 nice=10 sched=0/0 cgrp=apps/bg_non_interactive handle=1333784720
06-01 18:04:02.518: I/dalvikvm(14027): | schedstat=( 0 0 0 ) utm=386 stm=11 core=0
06-01 18:04:02.518: I/dalvikvm(14027): at java.lang.String.<init>(String.java:~432)
06-01 18:04:02.518: I/dalvikvm(14027): at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642)
06-01 18:04:02.518: I/dalvikvm(14027): at java.lang.StringBuilder.toString(StringBuilder.java:663)
06-01 18:04:02.518: I/dalvikvm(14027): at org.apache.http.client.utils.URLEncodedUtils.format(URLEncodedUtils.java:170)
06-01 18:04:02.518: I/dalvikvm(14027): at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:71)
06-01 18:04:02.518: I/dalvikvm(14027): at com.example.gallreylogs.GallreyObserver1$rest.doInBackground(GallreyObserver1.java:221)
06-01 18:04:02.518: I/dalvikvm(14027): at com.example.gallreylogs.GallreyObserver1$rest.doInBackground(GallreyObserver1.java:1)
06-01 18:04:02.518: I/dalvikvm(14027): at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-01 18:04:02.518: I/dalvikvm(14027): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-01 18:04:02.518: I/dalvikvm(14027): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-01 18:04:02.518: I/dalvikvm(14027): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-01 18:04:02.518: I/dalvikvm(14027): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-01 18:04:02.518: I/dalvikvm(14027): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-01 18:04:02.518: I/dalvikvm(14027): at java.lang.Thread.run(Thread.java:856)
06-01 18:04:02.518: W/dalvikvm(14027): threadid=11: thread exiting with uncaught exception (group=0x4102d2a0)
06-01 18:04:02.528: E/AndroidRuntime(14027): FATAL EXCEPTION: AsyncTask #1
06-01 18:04:02.528: E/AndroidRuntime(14027): java.lang.RuntimeException: An error occured while executing doInBackground()
06-01 18:04:02.528: E/AndroidRuntime(14027): at android.os.AsyncTask$3.done(AsyncTask.java:299)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
06-01 18:04:02.528: E/AndroidRuntime(14027): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.lang.Thread.run(Thread.java:856)
06-01 18:04:02.528: E/AndroidRuntime(14027): Caused by: java.lang.OutOfMemoryError
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.lang.String.<init>(String.java:432)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.lang.StringBuilder.toString(StringBuilder.java:663)
06-01 18:04:02.528: E/AndroidRuntime(14027): at org.apache.http.client.utils.URLEncodedUtils.format(URLEncodedUtils.java:170)
06-01 18:04:02.528: E/AndroidRuntime(14027): at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:71)
06-01 18:04:02.528: E/AndroidRuntime(14027): at com.example.gallreylogs.GallreyObserver1$rest.doInBackground(GallreyObserver1.java:221)
06-01 18:04:02.528: E/AndroidRuntime(14027): at com.example.gallreylogs.GallreyObserver1$rest.doInBackground(GallreyObserver1.java:1)
06-01 18:04:02.528: E/AndroidRuntime(14027): at android.os.AsyncTask$2.call(AsyncTask.java:287)
06-01 18:04:02.528: E/AndroidRuntime(14027): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
06-01 18:04:02.528: E/AndroidRuntime(14027): ... 5 more
Upvotes: 1
Views: 426
Reputation: 8034
This is because after converting to base64 image size become very large. Tryout small size image and you will understand this.
Upvotes: 0