为什么显示错误无法序列化?

时间:2013-01-11 12:11:17

标签: android ksoap2

我的网络服务;

[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;
    }

android中的代码:

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

2 个答案:

答案 0 :(得分:1)

替换此行

request.addProperty("arr", arr);

用这个

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

你不能传递整个数组。你应该传递它的一个元素。

<强>更新  您可以添加多个属性,如

 request.addProperty("prop1", arr[0]);
 request.addProperty("prop2", arr[1]);
 request.addProperty("prop3", arr[2]);

答案 1 :(得分:1)

你不能传递整个数组..所以你必须在String中使用separator @@并传递服务...并分别更改服务。

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;
}