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