【问题标题】:Ksoap2 in android cannot serializeandroid中的Ksoap2无法序列化
【发布时间】:2013-12-03 18:22:45
【问题描述】:

我在android中使用kso​​ap2

将数字列表作为字符串发送

但它有错误:

java.lang.runtimeexception 无法序列化

我搜索了这个错误的解决方案,但结果没有改变

请帮帮我

public String Send(ArrayList<String> contactlist)
{
    try{
SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
PropertyInfo pi=new PropertyInfo();
            pi.setType(String.class);
            pi.setName("contactlist");
            pi.setValue(contactlist);
            request.addProperty("contactlist", pi);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy); 

        // Creating SOAP envelope           
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        new MarshalBase64().register(envelope); // this line is for serialization

        //You can comment that line if your web service is not .NET one.
        envelope.dotNet = true;

        envelope.setOutputSoapObject(request);
        AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport("http://10.0.2.2:54869/Service1.asmx");
        androidHttpTransport.debug = true;
}
    catch (Exception exception)
        {
            return exception.toString();
        }
    try
        {
            androidHttpTransport.call(SOAP_ACTION, envelope);
            //String result = envelope.getResponse().toString();
            return "";//result;
        }
    catch (Exception exception)
        {
            return exception.toString();
        }

【问题讨论】:

    标签: java android ksoap2


    【解决方案1】:

    使用这个类进行序列化

    public class MarshalDouble implements Marshal {
            public Object readInstance(XmlPullParser parser, String namespace,
                    String name, PropertyInfo expected) throws IOException,
                    XmlPullParserException {
    
                return Double.parseDouble(parser.nextText());
            }
    
            public void register(SoapSerializationEnvelope cm) {
                cm.addMapping(cm.xsd, "double", Double.class, this);
    
            }
    
            public void writeInstance(XmlSerializer writer, Object obj)
                    throws IOException {
                writer.text(obj.toString());
            }
        }
    

    将此行添加到信封

        envelope.dotNet = true;
        envelope.implicitTypes = true;
        envelope.encodingStyle = SoapSerializationEnvelope.XSD;
        MarshalDouble md = new MarshalDouble();
        md.register(envelope);
    

    【讨论】:

    • 你好阿米特,你能告诉我如何发送自定义对象而不是双精度对象吗?
    • 谢谢。你能解释一下吗?它如何工作并扩展自定义对象?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多