java.lang.runtimeexception无法序列化char数据类型

时间:2013-04-30 11:54:19

标签: android

    int sitesrno = Integer.parseInt(alPhotoMainDetail.get(i).get("SITE_SRNO"));
                                        int eqsrno = Integer.parseInt(alPhotoMainDetail.get(i).get("EQPSRNO"));
                                        char phototype = alPhotoMainDetail.get(i).get("PHOTOTYPE").charAt(0);
                                        char catsrno = alPhotoMainDetail.get(i).get("CATSRNO").charAt(0);
                                        int usersrno = Integer.parseInt(alPhotoMainDetail.get(i).get("USERSRNO"));
                                        String dtime = alPhotoMainDetail.get(i).get("ENTRYDATE");
                                        String othername = "ss";
                                        isEPHead = parsing.insertEPhotoHead(max, sitesrno, eqsrno, phototype, catsrno, usersrno, dtime, othername);



public boolean insertEPhotoHead(int RefSrNo, int SiteSrNo, int EqpSrNo, char pp, char CatSrNo, int UserSrNo, String EntryDate, String OtherName) {
        try {
            SoapObject request = new SoapObject(NAMESPACE, SOAP_METHOD_EPHEAD);

            request.addProperty("RefSrNo", RefSrNo);
            request.addProperty("SiteSrNo", SiteSrNo);
            request.addProperty("EqpSrNo", EqpSrNo);
            request.addProperty("PhotoType", pp);
            request.addProperty("CatSrNo", CatSrNo);
            request.addProperty("UserSrNo", UserSrNo);
            request.addProperty("EntryDate", EntryDate);
            request.addProperty("OtherName", OtherName);        

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);


            envelope.dotNet = true;

            envelope.setOutputSoapObject(request);
MarshalDouble md = new MarshalDouble();
            md.register(envelope);

            AndroidHttpTransport aht = new AndroidHttpTransport(URL);

            aht.call(SOAP_ACTION_EPHEAD, envelope);

            SoapObject response = (SoapObject) envelope.getResponse();

            boolean res = Boolean.parseBoolean(response.toString());    

MarshalDouble.java

public class MarshalDouble implements Marshal {
    public Object readInstance(XmlPullParser parser, String namespace, String name,
                           PropertyInfo expected) throws IOException, XmlPullParserException {
        return (parser.nextText()).charAt(0);
    }


    public void register(SoapSerializationEnvelope cm) {
        cm.addMapping(cm.xsd, "char", char.class, this);
    }


    public void writeInstance(XmlSerializer writer, Object obj) throws IOException {
        writer.text(obj.toString());
    }
}

logcat的:

04-30 17:17:37.080: W/System.err(6562): java.lang.RuntimeException: Cannot serialize: E
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:629)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:613)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:582)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:566)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:623)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:547)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:192)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.transport.Transport.createRequestData(Transport.java:74)
04-30 17:17:37.080: W/System.err(6562):     at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:58)
04-30 17:17:37.080: W/System.err(6562):     at com.example.CommanDatabase.Parsing.insertEPhotoHead(Parsing.java:196)
04-30 17:17:37.080: W/System.err(6562):     at com.example.orecs.LoginAct$LoginAsyncTask.doInBackground(LoginAct.java:407)
04-30 17:17:37.080: W/System.err(6562):     at com.example.orecs.LoginAct$LoginAsyncTask.doInBackground(LoginAct.java:1)
04-30 17:17:37.090: W/System.err(6562):     at android.os.AsyncTask$2.call(AsyncTask.java:252)
04-30 17:17:37.090: W/System.err(6562):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-30 17:17:37.090: W/System.err(6562):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-30 17:17:37.090: W/System.err(6562):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
04-30 17:17:37.090: W/System.err(6562):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
04-30 17:17:37.090: W/System.err(6562):     at java.lang.Thread.run(Thread.java:1020)

注意:我正在使用此Web服务并传递所有值。但'phototype'char数据类型有问题。它显示错误。我不知道是什么原因。请帮忙摆脱这个。

2 个答案:

答案 0 :(得分:1)

我得到了解决方案:

我将Phototype存储为char数据类型。那就是为什么会出错。现在我改为String及其工作。

答案 1 :(得分:0)

我猜您需要更改代码的一行

  

envelope.setOutputSoapObject(请求);

  

envelope.setOutputSoapObject(请求[0]);

详细了解AsyncTask:Developer-site