Cómo aumentar el tamaño de transport.dump de 256 bytes a 512 o más bytes en KSOAP2?
Tengo el objeto de HttpTransportSE de la biblioteca de KSOAP2. Quiero volcado archivo de respuesta que puede contiene mote entonces simple 9697 carácter . Actualmente lo estoy haciendo haciendo transporte.
transport.debug = true; System.out.println("Response ----------"+transport.responseDump);
Pero me da media respuesta con … al fin.
- Android Dynamic Array
- Parse Arabic XML en Android
- Manejando espacios de nombres Xml con XmlPullParser
- Excepción de Android asynctask
- Lectura de un archivo .xml desde sdcard
En su estructura interna de codificación encontré que está utilizando 256 bytes para crear y destruir su responseDump como se muestra a continuación:
package org.ksoap2.transport; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.Proxy; import java.net.URL; import java.util.List; import org.ksoap2.HeaderProperty; import org.ksoap2.SoapEnvelope; import org.xmlpull.v1.XmlPullParserException; public class HttpTransportSE extends Transport { private ServiceConnection connection; public HttpTransportSE(String url) { super(null, url); } public HttpTransportSE(Proxy proxy, String url) { super(proxy, url); } public HttpTransportSE(String url, int timeout) { super(url, timeout); } public HttpTransportSE(Proxy proxy, String url, int timeout) { super(proxy, url, timeout); } public void call(String soapAction, SoapEnvelope envelope) throws IOException, XmlPullParserException { call(soapAction, envelope, null); } public List call(String soapAction, SoapEnvelope envelope, List headers) throws IOException, XmlPullParserException { if (soapAction == null) { soapAction = "\"\""; } byte[] requestData = createRequestData(envelope); this.requestDump = (this.debug ? new String(requestData) : null); this.responseDump = null; this.connection = getServiceConnection(); this.connection.setRequestProperty("User-Agent", "kSOAP/2.0"); if (envelope.version != 120) { this.connection.setRequestProperty("SOAPAction", soapAction); } this.connection.setRequestProperty("Content-Type", "text/xml"); this.connection.setRequestProperty("Connection", "close"); this.connection.setRequestProperty("Content-Length", "" + requestData.length); if (headers != null) { for (int i = 0; i < headers.size(); i++) { HeaderProperty hp = (HeaderProperty)headers.get(i); this.connection.setRequestProperty(hp.getKey(), hp.getValue()); } } this.connection.setRequestMethod("POST"); this.connection.connect(); OutputStream os = this.connection.openOutputStream(); os.write(requestData, 0, requestData.length); os.flush(); os.close(); requestData = null; List retHeaders = null; InputStream is; try { this.connection.connect(); is = this.connection.openInputStream(); retHeaders = this.connection.getResponseProperties(); } catch (IOException e) { is = this.connection.getErrorStream(); if (is == null) { this.connection.disconnect(); throw e; } } if (this.debug) { ByteArrayOutputStream bos = new ByteArrayOutputStream(); byte[] buf = new byte[256]; while (true) { int rd = is.read(buf, 0, 256); if (rd == -1) break; bos.write(buf, 0, rd); } bos.flush(); buf = bos.toByteArray(); this.responseDump = new String(buf); is.close(); is = new ByteArrayInputStream(buf); } parseResponse(envelope, is); return retHeaders; } public ServiceConnection getConnection() { return (ServiceConnectionSE)this.connection; } protected ServiceConnection getServiceConnection() throws IOException { return new ServiceConnectionSE(this.proxy, this.url, this.timeout); } public String getHost() { String retVal = null; try { retVal = new URL(this.url).getHost(); } catch (MalformedURLException e) { e.printStackTrace(); } return retVal; } public int getPort() { int retVal = -1; try { retVal = new URL(this.url).getPort(); } catch (MalformedURLException e) { e.printStackTrace(); } return retVal; } public String getPath() { String retVal = null; try { retVal = new URL(this.url).getPath(); } catch (MalformedURLException e) { e.printStackTrace(); } return retVal; } }
Usted encontró que es sólo
Int rd = is.read (buf, 0, 256);
Entonces, ¿hay alguna opción para aumentar el tamaño de responseDump?
- La forma más fácil de escribir y leer un XML
- Obtener elementos por nombre de etiqueta de un nodo en documento de Android (XML)?
- Excepción android.view.WindowLeaked
- Sincronizar datos en el dispositivo con el servidor?
- Cómo recuperar el valor de un atributo que contiene dos puntos en el nombre del atributo utilizando xpath
- Que es mejor en términos de análisis de rendimiento en Android, XML o JSON?
- ¿Cómo puedo acelerar el análisis XML de Android?
- Error al intentar probar análisis XML con Robolectric
No hay limitación en ksoap, pero está en logcat. Logcat no imprime cadenas largas, por lo que escribir en un archivo o escribir pieza por pieza en el registro.
if (transport.debug) { byte[] is = transport.responseDump.getBytes(); String path="/mnt/sdcard/appData/"; File file = new File(path+"responseDump.xml"); if (!file.exists()) { file.createNewFile(); } BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); bos.write(is); bos.flush(); bos.close(); }
- Utilice alarmManager y el servicio para realizar la notificación de planificación sólo durante un período de tiempo específico
- Registrarse como reproductor de música y reproducir canciones