Ich versuche, ein Projekt auf Steganographie, in dem nach dem Verbergen der Nachricht in Bild, ich möchte das Bild zu wamp Server auf dem PC senden. Es folgt haben die AsyncTask ich verwendet, um ein Bild zu senden, um wamp Server, in dem bin ich die Fatal Exception bekommen:java.lang.OutOfMemoryError Fehler in Asynctask
private class UploadImage extends AsyncTask<Void, Void, Void> {
Bitmap image;
String name;
ArrayList<NameValuePair> dataToSend = new ArrayList();
public UploadImage(String name){
String path = Environment.getExternalStorageDirectory().toString();
path = path+"/stegimg1.png";
Bitmap SendImg1 = BitmapFactory.decodeFile(path);
this.image = SendImg1;
this.name = name;
//Toast.makeText(getApplicationContext(), "Constructor - UpImg",Toast.LENGTH_SHORT).show();
}
@Override
protected Void doInBackground(Void... arg0) {
HttpParams httpRequestParams = getHttpRequestParams();
HttpClient client = new DefaultHttpClient(httpRequestParams);
HttpPost post = new HttpPost(SERVERADDRESS + "/SavePicture.php");
try{
post.setEntity(new UrlEncodedFormEntity(dataToSend));
client.execute(post);
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "Image sent to the server",Toast.LENGTH_SHORT).show();
super.onPostExecute(result);
//Toast.makeText(getApplicationContext(), "Image Uploaded" , Toast.LENGTH_SHORT).show();
}
@Override
protected void onPreExecute() {
Toast.makeText(getApplicationContext(), "Inside OnPreEXEC" , Toast.LENGTH_SHORT).show();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.PNG, 100, baos);
String encodedImage = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT);
dataToSend.add(new BasicNameValuePair("image", encodedImage));
dataToSend.add(new BasicNameValuePair("name", name));
super.onPreExecute();
}
}
Der Logcat Ausgang Ich erhalte ist
05-17 16:45:39.077: E/AndroidRuntime(1860): FATAL EXCEPTION: AsyncTask #1
05-17 16:45:39.077: E/AndroidRuntime(1860): java.lang.RuntimeException: An error occured while executing doInBackground()
05-17 16:45:39.077: E/AndroidRuntime(1860): at android.os.AsyncTask$3.done(AsyncTask.java:299)
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
05-17 16:45:39.077: E/AndroidRuntime(1860): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.lang.Thread.run(Thread.java:856)
05-17 16:45:39.077: E/AndroidRuntime(1860): Caused by: java.lang.OutOfMemoryError
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.lang.String.<init>(String.java:365)
05-17 16:45:39.077: E/AndroidRuntime(1860): at java.lang.String.<init>(String.java:228)
05-17 16:45:39.077: E/AndroidRuntime(1860): at android.util.Base64.encodeToString(Base64.java:456)
05-17 16:45:39.077: E/AndroidRuntime(1860): at com.msrohit.imageselect.MainActivity$UploadImage.doInBackground(MainActivity.java:209)
Was ist hier schiefgelaufen ??
'Was ist hier schiefgelaufen ??' Ein sehr großes Bild alle geladen im Speicher –
haben Sie nicht bekommen .... Was muss hier geändert werden ...? –
In uploadimage ... laden Sie ein Bild im Speicher. Dieses Bild ist einfach zu groß. –