2011-08-04 4 views
0

안드로이드에서 데이터 테이블을 처리하는 방법> 내 서비스 return dataTable.How 처리하는 방법? 내가 오류 다음있어안드로이드 전화 WCF 서비스, 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/"; 
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; 
} 

:

AnyType{element=anyType{complexType=anyType{choice=anyType{element=anyType{complexType=anyType{sequence=anyType{element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; element=anyType{}; }; }; }; }; }; }; } 

나에게

+0

당신은 당신의 서비스가 JSON 피드를 반환하고 당신의 안드로이드 응용 프로그램에 받았을 때 가진 생각 해 봤나 객체에 비 직렬화? Google의 Gson 라이브러리는 그런 일에 완벽합니다. 이것은 또한 훨씬 더 가볍고 네트워크 트래픽에 좋을 것입니다. – hooked82

+0

감사합니다. 나는 그걸 시도 할 것입니다. – Piraba

답변

1

당신은 할 수있는 좋은 방법입니다 문자열로 JSON으로는 DataTable을 문자열 & 콘서트에있어서 형식을 반환 & 쉽게

//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"; 
      } 
    } 
+0

감사합니다. greate 답변. 나는이 이슈를 2 일 넘게 겪었습니다. – Piraba

0

전혀 오류가 아닌가요지고 오류 도와주세요. 적어도, 당신이 가지고있는 것과 매우 유사한 설정을 사용하여 내 응용 프로그램에서 본 행동에 관한 것입니다. 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); 
} 

응답이 표시되면 필요한 데이터를 얻으려면 몇 단계를 파헤쳐야 할 수 있습니다. 6 또는 7 단계의 깊이. 옵션이라면 웹 서비스에서받는 응답을 변경하여 구문 분석하기가 더 쉽습니다.