0

私のウェブサービス;

[WebMethod]
    public int insertNhanVien(string[] arr)
    {

        SqlConnection con = new SqlConnection();
        // con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=Bai1;Integrated Security=True";
        con.ConnectionString = "server=.\\SQLEXPRESS;database=QLNV;uid=sa;pwd=123456";
        con.Open();
        int n = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            string[] s = arr[i].ToString().Split(',');

            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "Insert Into MUser(Ten,Tuoi) values(" + s[0].Replace("'", "''") + "," + s[1] + ")";
            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;

            n = cmd.ExecuteNonQuery();
        }
        return n;
    }

そしてアンドロイドでコード:

private boolean insertNhanVient() {
        boolean result = false;
        try {

            String NAMESPACE ="http://tempuri.org/";
            String METHOD_NAME ="insertNhanVien";
            String URL ="http://localhost:10829/WebSite/Service.asmx";
            String SOAP_ACTIONS = NAMESPACE + "/" + METHOD_NAME;
            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            String [] arr =new String[3];
            arr[0]="le,12";
            arr[1]="hoang,33";
            arr[2]="nhung,23";
            request.addProperty("arr", arr);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);

            envelope.dotNet=true;
            envelope.setOutputSoapObject(request);
            HttpTransportSE androidhttpTranport = new HttpTransportSE(URL);

            try {
                androidhttpTranport.call(SOAP_ACTIONS, envelope);
            } catch (IOException e3) {              
                result = false;

            } catch (XmlPullParserException e3) {

                result = false;
            }
            Object responseBody = null;
            try {
                responseBody = envelope.getResponse();
                String t = responseBody.toString();
                if (t.equals("1")) {
                    result = true;
                }
            } catch (SoapFault e2) {

                result = false;
            }
        } catch (Exception e) {

            result = false;
        } finally {
        }
        return result;
    }

例外を表示する理由: java.lang.RuntimeException: Cannot serialize: [Ljava.lang.String;@4051d0a0?

4

2 に答える 2

1

この行を置き換えます

request.addProperty("arr", arr);

これとともに

request.addProperty("arr", arr[0]);

配列全体を渡すことはできません。その1つの要素を渡す必要があります。

更新次 のような複数のプロパティを追加できます

 request.addProperty("prop1", arr[0]);
 request.addProperty("prop2", arr[1]);
 request.addProperty("prop3", arr[2]);
于 2013-01-11T12:14:59.077 に答える
1

配列全体を渡すことはできません..そのため、文字列でセパレータ @@ を使用し、それをサービスに渡し、サービスごとに変更する必要があります。

String commasepratedString="";
for(int i=0;i<arr.length();i++)
{
if(i!=(arr.length-1)) 
{
commasepratedString=commasepratedString+arr[i]+"@@";
}
else
{
commasepratedString=commasepratedString+arr[i];
}
}

 request.addProperty("arr", commasepratedString);

このようにサービスコードを変更します

[WebMethod]
public int insertNhanVien(string commasepratedString)
{
    String arr[] = commasepratedString.Split('@@');
    SqlConnection con = new SqlConnection();
    // con.ConnectionString = "Data Source=.\\SQLEXPRESS;InitialCatalog=Bai1;          Integrated Security=True";
    con.ConnectionString = "server=.\\SQLEXPRESS;database=QLNV;uid=sa;pwd=123456";
    con.Open();
    int n = 0;
    for (int i = 0; i < arr.Length; i++)
    {
        string[] s = arr[i].ToString().Split(',');

        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "Insert Into MUser(Ten,Tuoi) values(" + s[0].Replace("'", "''") + "," + s[1] + ")";
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;

        n = cmd.ExecuteNonQuery();
    }
    return n;
}
于 2013-01-11T12:29:00.373 に答える