Android调用WCF服务,返回DataTable
如何在android>My service return dataTable中处理数据表,如何处理Android调用WCF服务,返回DataTable,android,wcf,Android,Wcf,如何在android>My service return dataTable中处理数据表,如何处理 public static final String APPURL = "http://192.168.1.213:6969/MySalesServices"; private static final String METHOD_NAME = "SalesList"; private static final String NAMESPACE = "http://tempuri.org/
public static final String APPURL = "http://192.168.1.213:6969/MySalesServices";
private static final String METHOD_NAME = "SalesList";
private static final String NAMESPACE = "http://tempuri.org/";
private static String SOAP_ACTION = "http://tempuri.org/IMySalesServices/SalesList";
SoapPrimitive responsePrimitive = null;
ArrayList<String> tablesName = new ArrayList<String>();
public void onCreate(Bundle savedInstanceState) {
..................
}
public SoapPrimitive soapPrimitive(String METHOD_NAME, String SOAP_ACTION,String NAMESPACE, String URL) throws IOException, XmlPullParserException {
SoapPrimitive responses = null;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); // set up
request.addProperty("strExec", strExecutive);
request.addProperty("strBusinessUnit", strBusinessUnit);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // put all required data into a soap
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
AndroidHttpTransport httpTransport = new AndroidHttpTransport(URL);
httpTransport.debug = true;
try {
httpTransport.call(SOAP_ACTION, envelope);
responses = (SoapPrimitive) envelope.getResponse();
}catch(SocketException ex){
ex.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return responses;
}
请帮帮我,你得到的错误根本不是错误。至少,这是我在自己的应用程序中看到的行为,使用的设置与您的设置非常相似。您是否尝试过对SoapObject强制转换响应?然后,您可以调用该SoapObject上的
.getPropertyCount()
方法,开始在响应内容中循环。快速示例:
//Create a Transport object makes the webservice call
HttpTransportSE httpTrans = new HttpTransportSE(URL);
httpTrans.call(SOAP_ACTION, env);
//Cast the object to SoapObject
SoapObject storages = (SoapObject)env.getResponse();
//Loop trough the result
for(int i = 0; i < storages.getPropertyCount(); i++) {
//Get a SoapObject for each storage
SoapObject storage = (SoapObject)storages.getProperty(i);
}
//创建传输对象进行webservice调用
HttpTransportSE httpTrans=新的HttpTransportSE(URL);
httpTrans.call(SOAP_ACTION,env);
//将对象强制转换为SoapObject
SoapObject存储=(SoapObject)env.getResponse();
//在结果中循环
对于(int i=0;i
看到您得到的响应,您可能需要深入挖掘几层才能获得所需的数据。6或7层深。如果这是一个选项,我会更改您从Web服务获得的响应,以便更容易解析。您将方法类型返回为String,并将其数据表协调为Json作为String,这是一个很好的方法&简单
//Converting table to json
public String ConverTableToJson(DataTable dtDownloadJson)
{
string[] StrDc = new string[dtDownloadJson.Columns.Count];
string HeadStr = string.Empty;
if (dtDownloadJson.Rows.Count > 0)
{
for (int i = 0; i < dtDownloadJson.Columns.Count; i++)
{
StrDc[i] = dtDownloadJson.Columns[i].Caption;
HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
}
if (HeadStr.Length > 0)
{
HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
StringBuilder Sb = new StringBuilder();
Sb.Append("{\"" + dtDownloadJson.TableName + "\" : [");
for (int i = 0; i < dtDownloadJson.Rows.Count; i++)
{
string TempStr = HeadStr;
Sb.Append("{");
for (int j = 0; j < dtDownloadJson.Columns.Count; j++)
{
TempStr = TempStr.Replace(dtDownloadJson.Columns[j] + j.ToString() + "¾", dtDownloadJson.Rows[i][j].ToString());
}
Sb.Append(TempStr + "},");
}
Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
Sb.Append("]}");
return Sb.ToString();
}else
{
return "0";
}
}
else
{
return "0";
}
}
//将表转换为json
公共字符串ConverTableToJson(数据表dtDownloadJson)
{
string[]StrDc=新字符串[dtDownloadJson.Columns.Count];
string HeadStr=string.Empty;
如果(dtDownloadJson.Rows.Count>0)
{
for(int i=0;i0)
{
HeadStr=HeadStr.子字符串(0,HeadStr.长度-1);
StringBuilder Sb=新的StringBuilder();
Sb.追加(“{\”+dtDownloadJson.TableName+“\”:[”);
for(int i=0;i
您是否考虑过让您的服务返回一个JSON提要,并在Android应用程序中收到该提要时,将其反序列化到您的对象?谷歌的Gson库非常适合这样做。这也将是一个更轻的,这是对网络流量好谢谢。它的伟大的答案。我面对这个问题超过两天
//Converting table to json
public String ConverTableToJson(DataTable dtDownloadJson)
{
string[] StrDc = new string[dtDownloadJson.Columns.Count];
string HeadStr = string.Empty;
if (dtDownloadJson.Rows.Count > 0)
{
for (int i = 0; i < dtDownloadJson.Columns.Count; i++)
{
StrDc[i] = dtDownloadJson.Columns[i].Caption;
HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
}
if (HeadStr.Length > 0)
{
HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
StringBuilder Sb = new StringBuilder();
Sb.Append("{\"" + dtDownloadJson.TableName + "\" : [");
for (int i = 0; i < dtDownloadJson.Rows.Count; i++)
{
string TempStr = HeadStr;
Sb.Append("{");
for (int j = 0; j < dtDownloadJson.Columns.Count; j++)
{
TempStr = TempStr.Replace(dtDownloadJson.Columns[j] + j.ToString() + "¾", dtDownloadJson.Rows[i][j].ToString());
}
Sb.Append(TempStr + "},");
}
Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1));
Sb.Append("]}");
return Sb.ToString();
}else
{
return "0";
}
}
else
{
return "0";
}
}