Ciao a tutti,
Effettuando una chiamata a webservice .net il telefono mi va in outofmemory.
Ho cercato in google ma la maggior parte delle soluzioni non mi risolvono il problema(
Spero che qualcuno di voi mi possa aiutare.
Ciao
Renato
Ciao a tutti,
Effettuando una chiamata a webservice .net il telefono mi va in outofmemory.
Ho cercato in google ma la maggior parte delle soluzioni non mi risolvono il problema(
Spero che qualcuno di voi mi possa aiutare.
Ciao
Renato
Hai implementato ksoap2? Puoi postare il logcat dell'errore?
Inviato dal mio Galaxy Nexus con Tapatalk 2
Nexus 6 - 5.0.1 Stock
Nexus 5 - 5.0.1 Stock + Root
Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
------------------------------------------------------------------------
https://sites.google.com/site/frank17next/
l'errore è solo out of memory. perè ecco il logcat.
spero in una mano
codice:10-18 10:34:47.112: E/dalvikvm-heap(546): Out of memory on a 33553936-byte allocation. 10-18 10:34:47.112: I/dalvikvm(546): "AsyncTask #1" prio=5 tid=11 RUNNABLE 10-18 10:34:47.112: I/dalvikvm(546): | group="main" sCount=0 dsCount=0 obj=0x413f7ec0 self=0x1941b8 10-18 10:34:47.112: I/dalvikvm(546): | sysTid=565 nice=10 sched=0/0 cgrp=bg_non_interactive handle=2401696 10-18 10:34:47.112: I/dalvikvm(546): | schedstat=( 24535987471 184956447367 2276 ) utm=1713 stm=740 core=0 10-18 10:34:47.112: I/dalvikvm(546): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:~91) 10-18 10:34:47.112: I/dalvikvm(546): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) 10-18 10:34:47.112: I/dalvikvm(546): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:204) 10-18 10:34:47.112: I/dalvikvm(546): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96) 10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync.dosync(webservicesync.java:331) 10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync.access$0(webservicesync.java:183) 10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync$sTask.doInBackground(webservicesync.java:542) 10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync$sTask.doInBackground(webservicesync.java:1) 10-18 10:34:47.112: I/dalvikvm(546): at android.os.AsyncTask$2.call(AsyncTask.java:264) 10-18 10:34:47.112: I/dalvikvm(546): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 10-18 10:34:47.112: I/dalvikvm(546): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 10-18 10:34:47.112: I/dalvikvm(546): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 10-18 10:34:47.112: I/dalvikvm(546): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 10-18 10:34:47.112: I/dalvikvm(546): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 10-18 10:34:47.112: I/dalvikvm(546): at java.lang.Thread.run(Thread.java:856) 10-18 10:34:47.433: W/System.err(546): java.lang.OutOfMemoryError 10-18 10:34:47.482: W/System.err(546): at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91) 10-18 10:34:47.482: W/System.err(546): at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201) 10-18 10:34:47.552: W/System.err(546): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:204) 10-18 10:34:47.552: W/System.err(546): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96) 10-18 10:34:47.572: W/System.err(546): at skolidspeak.test.test.webservicesync.dosync(webservicesync.java:331) 10-18 10:34:47.634: W/System.err(546): at skolidspeak.test.test.webservicesync.access$0(webservicesync.java:183) 10-18 10:34:47.663: W/System.err(546): at skolidspeak.test.test.webservicesync$sTask.doInBackground(webservicesync.java:542) 10-18 10:34:47.742: W/System.err(546): at skolidspeak.test.test.webservicesync$sTask.doInBackground(webservicesync.java:1) 10-18 10:34:47.752: W/System.err(546): at android.os.AsyncTask$2.call(AsyncTask.java:264) 10-18 10:34:47.852: W/System.err(546): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 10-18 10:34:47.862: W/System.err(546): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 10-18 10:34:47.862: W/System.err(546): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 10-18 10:34:48.004: W/System.err(546): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 10-18 10:34:48.102: W/System.err(546): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 10-18 10:34:48.262: W/System.err(546): at java.lang.Thread.run(Thread.java:856)
ciao Renato
Hum, potrebbe essere che la risposta soap sia estremamente grande.
Nelle righe di codice del codice sorgente indicato nel logcat:
che operazioni svolgi?codice:10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync.dosync(webservicesync.java:331) 10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync.access$0(webservicesync.java:183) 10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync$sTask.doInBackground(webservicesync.java:542) 10-18 10:34:47.112: I/dalvikvm(546): at skolidspeak.test.test.webservicesync$sTask.doInBackground(webservicesync.java:1)
Ad ogni modo, se è vero che la risposta soap è davvero molto grande, dovrai provare e memorizzarla direttamente in un file su sd (FileOutputStream/ OutputStreamWriter), per poi leggerla con un Xmlparser
Nexus 6 - 5.0.1 Stock
Nexus 5 - 5.0.1 Stock + Root
Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
------------------------------------------------------------------------
https://sites.google.com/site/frank17next/
ti confermo che è mi ritorna un soap estremamente grande tu hai un link con un esempio per gestire FileOutputStream/ OutputStreamWriter?
comunque nella activity faccio la chiamata al webservice e scrivo su di un database basta tutto qui.
Grazie della risposta
ciao
Renato
Quindi hai già verificato che è il ritorno soap ad essere grande.
Hai individuato esattamente la riga del codice sorgente java da dove si inizia a propagare l'errore di out of memory, potresti postare il metodo dove è contenuta?
p.s. al di là della memorizzazione in db, dove memorizzi la risposta al termine della chiamata attualmente?
Che ordine di grandezza c'è? Io, ad esempio, manipolo delle immagini convertite in Base64 di circa 12/15kb senza alcun errore di out of memory
Nexus 6 - 5.0.1 Stock
Nexus 5 - 5.0.1 Stock + Root
Galaxy Note 3 GT-N9005 - 4.4.4 Stock + Root
Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
------------------------------------------------------------------------
https://sites.google.com/site/frank17next/
Scusa se ti rispondo solo oggi ma non ero a casa confermo che la il soap è grande molto grande
l'errore me lo da in fase di chiamata.
il mio problema è che non so mai la dimensione della risposta perchè dipende da quante attività scarico, e dipendono a loro volta dalla data di modifica.
codice:if(att.isChecked()==true){ String response=null; // VMRuntime.getRuntime().setMinimumHeapSize("240M") ; ActivityManager am = ((ActivityManager)getSystemService(Activity.ACTIVITY_SERVICE)); int largeMemory = am.getLargeMemoryClass(); int memory= am.getMemoryClass(); //faccio la chiamata e passo un codicche mi identificherà la chiamata anche al ritorno final HttpTransportSE androidHttpTransport1 = new HttpTransportSE(URL,TIMEOUT); try {androidHttpTransport1.debug=true; //this is the actual part that will call the webservice androidHttpTransport1.call("http://tempuri.org/GetAttivita", envelope1); ; // response=androidHttpTransport1.responseDump; } catch (Exception e) {String ss = e.toString(); write(ss); e.printStackTrace();} SoapObject result1 = null; Object objTestNull = null;//in intestazione objTestNull = envelope1.bodyIn; if (objTestNull!=null){ try { result1 = (SoapObject) envelope1.getResponse(); } catch (SoapFault e) {write("get response att"); String ss = e.toString(); write(ss); e.printStackTrace(); } for (int i = 0; i < result1.getPropertyCount(); i++){ int p=result1.getPropertyCount(); // TODO Auto-generated catch block objTestNull = null; if (result1 != null){ Boolean ese=null; //String codat,String op,String codanag,Boolean ese,String grup,String rif,String obj,String tipo,String desc,String rich,String dat,String ora,String codes String codat= ((SoapObject) result1.getProperty(i)).getProperty("Id").toString(); String op= ((SoapObject) result1.getProperty(i)).getProperty("CodiceUtente").toString(); ese=Boolean.getBoolean(((SoapObject) result1.getProperty(i)).getProperty("isEseguito").toString()); String codanag= ((SoapObject) result1.getProperty(i)).getProperty("CodiceAnagrafica").toString(); String grup= ((SoapObject) result1.getProperty(i)).getProperty("CodiceGruppoAttivita").toString(); String rif= ((SoapObject) result1.getProperty(i)).getProperty("ContattoNominativo").toString(); String obj= ((SoapObject) result1.getProperty(i)).getProperty("Oggetto").toString(); String tipo= ((SoapObject) result1.getProperty(i)).getProperty("CodiceTipoAttivita").toString(); String desc= ((SoapObject) result1.getProperty(i)).getProperty("Descrizione").toString(); String rich= ((SoapObject) result1.getProperty(i)).getProperty("Richiesta").toString(); String dat= ((SoapObject) result1.getProperty(i)).getProperty("DataEffettivo").toString(); String ora= ((SoapObject) result1.getProperty(i)).getProperty("OraEffettivo").toString(); String codes= ((SoapObject) result1.getProperty(i)).getProperty("CodiceEsito").toString(); //carico attività in database writedbatt(Utente,codat,op,codanag,ese,grup,rif,obj,tipo,desc,rich,dat,ora,codes); String oper=Ut.getText().toString(); if(oper.compareTo(op)==0/*&& ese==true*/) writedbscad(Utente,codat,op,codanag,ese,grup,rif,obj,tipo,desc,rich,dat,ora,codes); System.gc(); Runtime.getRuntime().gc(); } } } }//FINE INSERT ATT