Upload immagine: Out of memory on a 31961104-byte allocation
Ciao, ho un problema quando provo ad inviare un file immagine dal mio smartphone ad un server remoto tramite un webservice.
L'errore è il seguente dal LogCat:
Questo il codice java in uso, cosa posso fare di più?codice:09-25 11:48:54.175: W/Choreographer(12979): Already have a pending vsync event. There should only be one at a time. 09-25 11:48:54.235: D/dalvikvm(12979): GC_FOR_ALLOC freed 1497K, 19% free 46108K/56648K, paused 54ms, total 54ms 09-25 11:48:54.235: I/dalvikvm-heap(12979): Forcing collection of SoftReferences for 31961104-byte allocation 09-25 11:48:54.280: D/dalvikvm(12979): GC_BEFORE_OOM freed 10K, 19% free 46098K/56648K, paused 43ms, total 43ms 09-25 11:48:54.280: E/dalvikvm-heap(12979): Out of memory on a 31961104-byte allocation. 09-25 11:48:54.280: I/dalvikvm(12979): "Thread-9829" prio=5 tid=11 RUNNABLE 09-25 11:48:54.280: I/dalvikvm(12979): | group="main" sCount=0 dsCount=0 obj=0x425e5cf8 self=0x5994b920 09-25 11:48:54.280: I/dalvikvm(12979): | sysTid=13515 nice=0 sched=0/0 cgrp=apps handle=1498943496 09-25 11:48:54.280: I/dalvikvm(12979): | state=R schedstat=( 87020166 10222375 29 ) utm=7 stm=1 core=1 09-25 11:48:54.280: I/dalvikvm(12979): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 09-25 11:48:54.285: I/dalvikvm(12979): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 09-25 11:48:54.285: I/dalvikvm(12979): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:378) 09-25 11:48:54.285: I/dalvikvm(12979): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:417) 09-25 11:48:54.285: I/dalvikvm(12979): at com.up.upload.MainActivity.UploadImage(MainActivity.java:202) 09-25 11:48:54.285: I/dalvikvm(12979): at com.up.upload.MainActivity$2.run(MainActivity.java:148) 09-25 11:48:54.285: I/dalvikvm(12979): at java.lang.Thread.run(Thread.java:841) 09-25 11:48:54.295: D/skia(12979): --- decoder->decode returned false 09-25 11:48:54.295: W/dalvikvm(12979): threadid=11: thread exiting with uncaught exception (group=0x41b55700) 09-25 11:48:54.300: E/AndroidRuntime(12979): FATAL EXCEPTION: Thread-9829 09-25 11:48:54.300: E/AndroidRuntime(12979): java.lang.OutOfMemoryError 09-25 11:48:54.300: E/AndroidRuntime(12979): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 09-25 11:48:54.300: E/AndroidRuntime(12979): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:623) 09-25 11:48:54.300: E/AndroidRuntime(12979): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:378) 09-25 11:48:54.300: E/AndroidRuntime(12979): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:417) 09-25 11:48:54.300: E/AndroidRuntime(12979): at com.up.upload.MainActivity.UploadImage(MainActivity.java:202) 09-25 11:48:54.300: E/AndroidRuntime(12979): at com.up.upload.MainActivity$2.run(MainActivity.java:148) 09-25 11:48:54.300: E/AndroidRuntime(12979): at java.lang.Thread.run(Thread.java:841)
Grazie
codice:public void UploadImage(String image, String imageName) { SoapObject Request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME); File mFile = new File(imagepath); ByteArrayOutputStream stream = new ByteArrayOutputStream(); Bitmap bmp = BitmapFactory.decodeFile(mFile.getAbsolutePath()); bmp.recycle(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); Request.addProperty("docbinaryarray", byteArray); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.dotNet = true; envelope.setOutputSoapObject(Request); HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS); androidHttpTransport.debug = true; try { androidHttpTransport.call(SOAP_ACTION, envelope); SoapPrimitive resultString = (SoapPrimitive) envelope.getResponse(); Log.d("MainActivity.class", "Valore restituito: " + resultString); } catch (Exception e) { e.printStackTrace(); } } new Thread(new Runnable() { public void run() { try { String lStr = imagepath; UploadImage( imagepath, lStr.substring(lStr.lastIndexOf("/")).replace( "/", "")); } catch (Exception e) { e.printStackTrace(); Log.e("MainActivity.class", "Errore nel metodo 2...", e); } } }).start();

Rispondi quotando