2014-08-28 63 views
0

我在c#中有一个web服务,它以datatable的形式返回数据,我想访问数据表dt中有110行的元素, 8列如何检索我的android应用程序中的每个行值并将其显示在表中。帮我请:在Android应用程序中从asp.net webservice类型数据表中检索元素

这是我的web服务:

[WebMethod(Description = "Webservice for generating category wise report")] 
public DataTable getCategoryWiseReport(string district) 
{ 
    var con = new SqlConnection("data source=(local);initial catalog=xxxx;integrated security=true"); 
    con.Open(); 
    var cmd = new SqlCommand(); 
    cmd.Connection = con; 
    cmd.CommandText = "ReportSummery"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    DataTable dt= new DataTable(); 
    SqlDataAdapter ad = new SqlDataAdapter(cmd); 
    cmd.Parameters.AddWithValue("@district", district); 
    cmd.ExecuteNonQuery(); 
    ad.Fill(dt); 

    //string ofc_code=dt.Rows[0][0].ToString(); 
    //string ofc_desg = dt.Rows[0][1].ToString(); 
    //string ofc_name = dt.Rows[0][2].ToString(); 
    //string dep_name = dt.Rows[0][3].ToString(); 
    //string total_comp = dt.Rows[0][4].ToString(); 
    //string pending = dt.Rows[0][5].ToString(); 
    //string desposed = dt.Rows[0][6].ToString(); 
    //string interim = dt.Rows[0][7].ToString(); 
    //string defaulter = dt.Rows[0][8].ToString(); 
    for (int i = 0; i <= (dt.Rows.Count-1); i++) 
    { 
     for (int j = 0; j <= 8; j++) 
     { 
      dt.Rows[i][j].ToString(); 
     } 
    } 
     con.Close(); 
     return dt; 
    //string s=ofc_code+","+ofc_desg+","+ofc_name+","+dep_name+","+total_comp+","+pending+","+desposed+","+interim+","+defaulter; 
    //return s; 

} 
+0

你有没有考虑使用一些ORM并将数据映射到对象数组? – 2014-08-28 09:01:40

+0

不,我不。如何做到这一点...... – user3469177 2014-08-28 09:10:42

+0

试试这个:http://stackoverflow.com/questions/19650503/get-array-item-from-webservice-object-to-android/19653152#19653152 – Dhaval 2014-08-28 09:19:12

回答

0
StringBuilder JSON = new StringBuilder(); 
    JSON.append("{"); 
    JSON.append("\"Customers\":["); 
    for (int i = 0; i <= (dt.Rows.Count-1); i++) 
    {  
      //dt.Rows[i][j].ToString(); 
      JSON.append("{"); 
      JSON.append("\"ofc_code\":\"" +dt.Rows[i].ofc_code.tostring() + "\", "); 
      JSON.append("\"ofc_desg \":\"" + dt.Rows[i].ofc_desg.tostring() + "\" "); 
      JSON.append("\"ofc_name \":\"" +dt.Rows[i].ofc_name.tostring() + "\", "); 
      JSON.append("\"dep_name \":\"" + dt.Rows[i].dep_name.tostring() + "\" "); 
      JSON.append("\"total_comp \":\"" +dt.Rows[i].total_comp.tostring() + "\", "); 
      JSON.append("\"pending \":\"" + dt.Rows[i].pending.tostring() + "\" "); 
      JSON.append("\"desposed \":\"" +dt.Rows[i].desposed.tostring() + "\", "); 
      JSON.append("\"interim \":\"" + dt.Rows[i].interim.tostring() + "\" "); 
      JSON.append("\"defaulter \":\"" + dt.Rows[i].defaulter.tostring() + "\" "); 
      JSON.append("},"); 

    } 

    if (JSON.ToString().EndsWith(",")) 
    JSON = JSON.Remove(JSON.Length - 1, 1); 

    JSON.append("]}"); 

使用在Android部分

 private static final String METHOD_NAME = "sayHello";// give the method name 
     private static final String NAMESPACE = "http://ws.android.com/";// give ur namespace 
     private static final String URL = "http://175.157.229.119:8080/ wsdl";// provide URL 
     private static final String SOAP_ACTION = METHOD_NAME+ NAMESPACE ; 
     private static final String Customers= "Customers";          
     private static final String ofc_code= "ofc_code"; 
     private static final String ofc_desg = "ofc_desg "; 
     private static final String ofc_name = "ofc_name "; 
     private static final String dep_name = "dep_name "; 
     private static final String total_comp = "total_comp "; 
     private static final String pending = "pending "; 
     private static final String desposed = "desposed "; 
     private static final String interim = "interim "; 
     private static final String defaulter = "defaulter "; 
     ArrayList<HashMap<String, String>> contactList; 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);   
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request); 

     HttpTransportSE ht = new HttpTransportSE(URL); 
     ht.call(SOAP_ACTION, envelope); 
     final SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
     final String JSON= response.toString(); 

     try { 
      JSONObject jsonObj = new JSONObject(JSON); 

      // Getting JSON Array node 
      JSONArray contacts = jsonObj.getJSONArray(Customers); 

      // looping through All Contacts 
      for (int i = 0; i < contacts.length(); i++) { 
       JSONObject c = contacts.getJSONObject(i); 

       // tmp hashmap for single contact 
       HashMap<String, String> contactdata = new HashMap<String, String>(); 

       // adding each child node to HashMap key => value 
       contactdata.put(ofc_code, c.getString(ofc_code)); 
       contactdata.put(ofc_desg , c.getString(ofc_desg)); 
       contactdata.put(ofc_name , c.getString(ofc_name)); 
       contactdata.put(dep_name , c.getString(dep_name)); 
       contactdata.put(total_comp , c.getString(total_comp)); 
       contactdata.put(pending , c.getString(pending)); 
       contactdata.put(desposed , c.getString(desposed)); 
       contactdata.put(interim, c.getString(interim)); 
       contactdata.put(defaulter , c.getString(defaulter)); 
       // adding contact to contact list 
       contactList.add(contactdata); 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
+0

谢谢弟弟Jeetendra ....感谢兄弟... – user3469177 2014-08-28 17:26:54

+0

嘿兄弟我试着从两天打印这个联系人列表,但我不能,因为模拟器冻结并发出停止消息。或者我无法从contactList中检索数据到textview或其他东西。 – user3469177 2014-08-30 05:27:32

0

下载KSOAP(下载ksoap2 jar文件)。 首先你需要定制UR web服务,u需要让它为JSON字符串,下面是代码ü可以在Android部分

private static final String METHOD_NAME = "sayHello";// give the method name 
private static final String NAMESPACE = "http://ws.android.com/";// give ur namespace 
private static final String URL = "http://175.157.229.119:8080/ wsdl";// provide URL 
private static final String SOAP_ACTION = METHOD_NAME+ NAMESPACE ; 
private static final String ofc_code= "ofc_code"; 
private static final String ofc_desg = "ofc_desg "; 
private static final String ofc_name = "ofc_name "; 
private static final String dep_name = "dep_name "; 
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);   
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.setOutputSoapObject(request); 

    HttpTransportSE ht = new HttpTransportSE(URL); 
    ht.call(SOAP_ACTION, envelope); 
    final SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 
    final String str = response.toString(); 

     try { 
       JSONObject jsonObj = new JSONObject(str); 

       // Getting JSON Array node 
       JSONArray contacts = jsonObj.getJSONArray(TAG_CONTACTS); 

       // looping through All Contacts 
       for (int i = 0; i < contacts.length(); i++) { 
        JSONObject c = contacts.getJSONObject(i); 

        String id = c.getString(ofc_code); 
        String name = c.getString(ofc_desg); 
        String email = c.getString(ofc_name); 
        String address = c.getString(dep_name); 

        // tmp hashmap for single contact 
        HashMap<String, String> contact = new HashMap<String, String>(); 

        // adding each child node to HashMap key => value 
        contact.put(TAG_ID, id); 
        contact.put(TAG_NAME, name); 
        contact.put(TAG_EMAIL, email); 
        contact.put(TAG_PHONE_MOBILE, mobile); 

        // adding contact to contact list 
        contactList.add(contact); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
+0

请你能帮我通过给我以json的形式抛出数据的web服务。 – user3469177 2014-08-28 10:15:37

+0

只是给我一些时间,我会发送完整的代码,包括web服务 – Jeetendra 2014-08-28 10:20:33

+0

k感谢vry很多... – user3469177 2014-08-28 10:23:43

相关问题