2012-05-25 12 views
6

Cuando estoy consumiendo los servicios web de soap de Android quiero mostrar el resultado en la cadena de salida, ¿cómo puedo convertir ese flujo de entrada a Sting?¿Cómo puedo convertir datos de InputStream a String en Android SOAP Webservices

package com.venkattt.pack; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.SocketException; 

import org.ksoap2.SoapEnvelope; 
import org.ksoap2.serialization.SoapObject; 
import org.ksoap2.serialization.SoapPrimitive; 
import org.ksoap2.serialization.SoapSerializationEnvelope; 
import org.ksoap2.transport.AndroidHttpTransport; 
import org.ksoap2.transport.HttpTransportSE; 
import org.xmlpull.v1.XmlPullParser; 
import org.xmlpull.v1.XmlPullParserFactory; 

import android.app.Activity; 
import android.os.Bundle; 

public class SoapWebservicesExampleActivity extends Activity { 
    /** Called when the activity is first created. */ 
     final String NAMESPACE = "urn:sap-com:document:sap:soap:functions:mc-style"; 
    final String URL = "http://**********:8000/sap/bc/srt/wsdl/srvc_14DAE9C8D79F1EE196F1FC6C6518A345/wsdl11/allinone/ws_policy/document?sap-client=800&sap-user=************&sap-password=*********"; 
     final String METHOD_NAME = "Z_GET_CUST_GEN"; 
    final String SOAP_ACTION = "urn:sap-com:document:sap:soap:functions:mc-style/Z_GET_CUST_GEN"; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
      SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // set up 
      request.addProperty("Input", "1460"); 
      request.addProperty("Langu", "d"); 
      SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12); // put all required data into a soap 
      envelope.dotNet = true; 
      envelope.setOutputSoapObject(request); 
      HttpTransportSE httpTransport = new HttpTransportSE(URL); 
      httpTransport.debug = true; 

      try { 


       httpTransport.call(SOAP_ACTION, envelope); 
       SoapObject response = (SoapObject)envelope.getResponse(); 
       String str = response.getProperty(0).toString(); 

       System.out.println("theeeeeeeeeee"+str); 



       } 
      catch(SocketException ex){ 
        ex.printStackTrace(); 

       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
     } 


    } 

mi código final busque a la vez y que me haga saber

donde puedo poner que la conversión en el código anterior?

Respuesta

14
String response = convertStreamToString(instream); 

Método

private String convertStreamToString(InputStream is) { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder sb = new StringBuilder(); 

    String line = null; 
    try { 
     while ((line = reader.readLine()) != null) { 
      sb.append(line).append('\n'); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    return sb.toString(); 
} 
+0

gracias por su respuesta, ¿dónde puedo agregar en el código anterior? – user1414667

+0

en pocas palabras, puede agregar lo que quiero decir cuando tenga inputstrem –

+0

ust edité mi código completo, por favor vea una vez y dígame por qué esa excepción viene en mi logcat – user1414667

0

Usted puede tratar de esta manera:

SoapObject response = (SoapObject)envelope.getResponse(); 
String str = response.getProperty(0).toString(); 

str llevará a cabo el contenido, es necesario analizar más a fondo dependiendo de la exigencia. También, mire este enlace y hay un enlace para analizarlo.

http://android-devblog.blogspot.com/2010/06/soap-on-android.html

Trate de usar VER11 jabón en lugar de VER12 ya que esto es que da un error.

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

// ponga todos los datos requeridos en un jabón

Más información se puede tener sobre este desde este enlace: http://groups.google.com/group/android-developers/browse_thread/thread/b585862b6e939fd2

+0

gracias por su respuesta Recibo la excepción 05-25 16: 15: 31.205: WARN/System.err (1458): org.xmlpull.v1.XmlPullParserException: esperado: START_TAG {http://www.w3.org/ 2001/12/soap-envelope} Sobre (posición: START_TAG <{http: //schemas.xmlsoap.org/wsdl /} wsdl: definiciones targetNamespace = 'urn: sap-com: document: sap: soap: funciones: mc-style'> @ 1: 686 en [email protected]) – user1414667

+0

He actualizado la respuesta – UVM

+0

Mana ahora estoy recibiendo la misma excepción? – user1414667

3

líneas de lectura (tanto \ n \ r; no hay distinciones) puede hacer un desastre. Para obtener un String de un InputStream, le sugiero que copie/pegue el siguiente método y lo llame a donde lo necesite.

public static String getStringFromInputStream(InputStream stream, String charsetName) throws IOException 
{ 
    int n = 0; 
    char[] buffer = new char[1024 * 4]; 
    InputStreamReader reader = new InputStreamReader(stream, charsetName); 
    StringWriter writer = new StringWriter(); 
    while (-1 != (n = reader.read(buffer))) writer.write(buffer, 0, n); 
    return writer.toString(); 
} 
2

Basado en Shane McC article puede usar este método:

public String readFully(InputStream entityResponse) throws IOException { 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] buffer = new byte[1024]; 
int length = 0; 
while ((length = entityResponse.read(buffer)) != -1) { 
    baos.write(buffer, 0, length); 
} 
return baos.toString(); 
} 
0

que puede utilizar:

String response = org.apache.commons.io.IOUtils.toString(instream, "UTF-8"); 

Es necesario añadir org.apache.commons.io.jar a su construcción camino.

+0

Esa biblioteca no está disponible en android – cholewa1992

+1

Tiene que agregar org.apache.commons.io.jar –

Cuestiones relacionadas