2012-05-25 15 views
6

Quando sto consumando i servizi Web di sapone da Android, voglio visualizzare il risultato nella stringa di output, come posso convertire Input Stream in Sting?Come convertire i dati InputStream in String in servizi Web SOAP Android

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(); 
       } 
     } 


    } 

il mio codice finale si prega di guardare in una sola volta e fatemi sapere

dove posso mettere che la conversione nel codice sopra?

risposta

14
String response = convertStreamToString(instream); 

Metodo

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

grazie per la risposta dove posso aggiungere il codice sopra? – user1414667

+0

in breve, dove vuoi puoi aggiungere voglio dire quando hai inputstrem –

+0

ust ora ho modificato il mio codice completo per favore vedi una volta e fammi sapere perché quell'eccezione entra nel mio logcat – user1414667

0

Si può provare in questo modo:

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

str terrà il contenuto, è necessario analizzare ulteriormente a seconda del fabbisogno. Inoltre, per favore guarda questo link e c'è un link su come analizzarlo.

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

Prova utilizzando VER11 sapone al posto di VER12 come questo è dare errore.

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 

// inserire tutti i dati necessari in un sapone

Maggiori informazioni si possono avere su questo da questo link: http://groups.google.com/group/android-developers/browse_thread/thread/b585862b6e939fd2

+0

grazie per la risposta Sto ricevendo l'eccezione 05-25 16: 15: 31.205: WARN/System.err (1458): org.xmlpull.v1.XmlPullParserException: previsto: START_TAG {http://www.w3.org/ 2001/12/soap-envelope} Envelope (posizione: START_TAG <{http: //schemas.xmlsoap.org/wsdl /} wsdl: definizioni targetNamespace = 'urn: sap-com: document: sap: soap: funzioni: mc-style'> @ 1: 686 in [email protected]) – user1414667

+0

Ho aggiornato la risposta – UVM

+0

mana sto ricevendo la stessa eccezione? – user1414667

3

righe di lettura (sia \ ne \ r; distinzioni) può fare un casino Per ottenere una stringa da un InputStream, ti suggerisco di copiare/incollare il seguente metodo e chiamarlo ovunque ti serva.

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

Sulla base Shane McC article è possibile con questo metodo:

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

È possibile utilizzare:

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

È necessario aggiungere org.apache.commons.io.jar al vostro costruire sentiero.

+0

Quella libreria non è disponibile su Android – cholewa1992

+1

È necessario aggiungere org.apache.commons.io.jar –

Problemi correlati