Ksoap2在Android中不能序列 [英] Ksoap2 in android cannot serialize

查看:245
本文介绍了Ksoap2在Android中不能序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用ksoap2在机器人

发送号码列表作为字符串

但有错误:

java.lang.RuntimeException的不能序列

我寻找一个解决这个错误,但结果没有改变

可以帮我请

 公共字符串发送(ArrayList中<字符串> contactlist)
{
    尝试{
SoapObject请求=新SoapObject(WSDL_TARGET_NAMESPACE,OPERATION_NAME);
的PropertyInfo PI =新的PropertyInfo();
            pi.setType(为String.class);
            pi.setName(contactlist);
            pi.setValue(contactlist);
            request.addProperty(contactlist,PI);
。StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()permitAll()建();
        StrictMode.setThreadPolicy(政策);

        //创建SOAP信封
        SoapSerializationEnvelope包=新SoapSerializationEnvelope(SoapEnvelope.VER11);
        新MarshalBase64()寄存器(信封); //此行是为序列化

        //可以评论说,行了,如果您的Web服务是不是.NET之一。
        envelope.dotNet = TRUE;

        envelope.setOutputSoapObject(要求);
        AndroidHttpTransport androidHttpTransport =新AndroidHttpTransport(http://10.0.2.2:54869/Service1.asmx);
        androidHttpTransport.debug = TRUE;
}
    赶上(例外的例外)
        {
            返回exception.toString();
        }
    尝试
        {
            androidHttpTransport.call(SOAP_ACTION,包);
            //字符串结果= envelope.getResponse()的toString();
            返回; //结果;
        }
    赶上(例外的例外)
        {
            返回exception.toString();
        }
 

解决方案

使用这个类序列化

 公共类MarshalDouble实现元帅{
        公共对象readInstance(XmlPullParser分析器,字符串命名空间,
                字符串名称,预期的PropertyInfo)抛出IOException异常,
                XmlPullParserException {

            返回Double.parseDouble(parser.nextText());
        }

        公共无效寄存器(SoapSerializationEnvelope厘米){
            cm.addMapping(cm.xsd,双,Double.class,这一点);

        }

        公共无效writeInstance(XmlSerializer的作家,对象OBJ)
                抛出IOException异常{
            writer.text(obj.toString());
        }
    }
 

添加此行包围

  envelope.dotNet = TRUE;
    envelope.implicitTypes = TRUE;
    envelope.encodingStyle = SoapSerializationEnvelope.XSD;
    MarshalDouble MD =新MarshalDouble();
    md.register(信封);
 

I use ksoap2 in android

to send list of numbers as string

But it have error:

java.lang.runtimeexception cannot serialize

I search a solution to this error but result not change

Can Help me please

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

解决方案

Use this class for Serialization

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

Add this line to envelop

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

这篇关于Ksoap2在Android中不能序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆