2016-05-17 9 views
1

私はイメージでメッセージを隠した後に、イメージをPCのwampサーバーに送信したいステガノグラフィーでプロジェクトを実行しようとしています。私は致命的な例外を取得していた中で、サーバーをWAMP画像を送信するために使用しているAsyncTask以下の通りです:Asynctaskでjava.lang.OutOfMemoryErrorエラーが発生しました

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

} 

}

私は取得していますLogcat出力は

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) 
です

ここで何が間違っていますか?

+0

'ここで何が問題になったのですか? '非常に大きな画像がすべてメモリにロードされています –

+0

...ここで変更する必要があるものは...? –

+0

アップロード画像で...画像をメモリにロードしています。そのイメージは単純に大きすぎます。 –

答えて

1

Androidは、各アプリケーションのヒープサイズにハード制限を設定します。正確な ヒープサイズの制限は、デバイスが全体的に利用可能なRAMの量に基づいてデバイスによって異なります。あなたのアプリがヒープ の容量に達して、さらに多くのメモリを割り当てようとすると、 OutOfMemoryErrorが返されます。

あなたはヒープサイズを増やすと画像サイズを減らす必要があります。お役に立てれば 。

+1

ありがとう@あみや... –

関連する問題