[英]How can I convert InputStream data to String in Android SOAP Webservices
When I am consuming the soap web services from Android I want to display the result in output string how can I convert that Input Stream to Sting? 当我从Android使用soap Web服务时,我想在输出字符串中显示结果,如何将该输入流转换为Sting?
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();
}
}
}
my final code please look at once and let me know 我的最终代码请看一次,让我知道
where can I put that conversion in the above code? 我在哪里可以将转换放在上面的代码中?
String response = convertStreamToString(instream);
Method 方法
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();
}
Reading lines (both \\n and \\r; no distinctions) can make a mess. 阅读行(\\ n和\\ r;没有区别)可能会弄得一团糟。 To get a String from an InputStream, I suggest you copy/paste the following method and call it wherever you need it.
要从InputStream获取String,我建议您复制/粘贴以下方法并在需要的地方调用它。
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();
}
Based on Shane McC article you can using this method: 根据Shane McC的文章,您可以使用此方法:
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();
}
You can try this way: 你可以这样试试:
SoapObject response = (SoapObject)envelope.getResponse();
String str = response.getProperty(0).toString();
str will hold the content, you need to parse it further depending upon the requirement. str将保留内容,您需要根据要求进一步解析。 Also, please look this link as well there is a link how to parse it.
另外,请查看此链接以及如何解析它的链接。
http://android-devblog.blogspot.com/2010/06/soap-on-android.html http://android-devblog.blogspot.com/2010/06/soap-on-android.html
Try using soap VER11 instead of VER12 as this is giving error. 尝试使用soap VER11而不是VER12,因为这会给出错误。
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
// put all required data into a soap //将所有必需的数据放入肥皂中
More information can be had about this from this link: http://groups.google.com/group/android-developers/browse_thread/thread/b585862b6e939fd2 可以通过以下链接获取有关此内容的更多信息: http : //groups.google.com/group/android-developers/browse_thread/thread/b585862b6e939fd2
You can use: 您可以使用:
String response = org.apache.commons.io.IOUtils.toString(instream, "UTF-8");
You need to add org.apache.commons.io.jar to your build path. 您需要将org.apache.commons.io.jar添加到构建路径中。
import com.google.android.gms.common.util.IOUtils;
InputStream input = getInputStream();
String body = new String(IOUtils.toByteArray(input), "UTF-8");
input.close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.