首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android KSoap输出错误

Android KSoap输出错误
EN

Stack Overflow用户
提问于 2011-07-23 20:10:03
回答 1查看 648关注 0票数 0

我试图在android上使用web服务,但在模拟器输出中出现了一个错误:

org.xmlpull.v1.XmlPullParserException:expecteed:

START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope(position:START_TAG@1:6 in java.io.InputStreamReader@43e567a0)

在这里,我的密码是:

代码语言:javascript
复制
package com.webServiceDeneme;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*; 

public class WebServiceDenemeActivity extends Activity {
Button btn;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btn=(Button)findViewById(R.id.button1);
    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            String NAMESPACE="http://www.vakifbank.com.tr/";
            String METHOD_NAME="faiz-maliyet-oranlari.aspx";
            String SOAP_ACTION="http://www.vakifbank.com.tr/faiz-maliyet-oranlari.aspx";
            String URL="http://192.168.2.1/VipEvents/Services/BasicServices.asmx";
            SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);

            SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet=true;
            envelope.setOutputSoapObject(request);

            try
            {
                AndroidHttpTransport aht=new AndroidHttpTransport(URL);
                aht.call(SOAP_ACTION, envelope);
                SoapPrimitive res=(SoapPrimitive)envelope.getResponse();
                btn.setText(res.toString());

            }
            catch (Exception e) {
                // TODO: handle exception
                btn.setText(e.toString());
                e.printStackTrace();
            }
        }
    });

}}

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2011-07-24 00:17:05

很可能您已经收到了非SOAP响应。

要转储和检查SOAP请求/响应,请设置aht.debug = true;,然后在调用aht.cal(...)之后,打印值aht.requestDumpaht.responseDump以输出(如外部文件或LogCat)。

例如:

代码语言:javascript
复制
//...
aht.debug = true;
aht.call(SOAP_ACTION, envelope);

Log.e("SOAP_REQUEST", "----------------------------");
Log.e("SOAP_REQUEST", XmlUtils.format(aht.requestDump));
Log.e("SOAP_REQUEST", "----------------------------");

Log.e("SOAP_RESPONSE", "----------------------------");
Log.e("SOAP_RESPONSE", XmlUtils.format(aht.responseDump));
Log.e("SOAP_RESPONSE", "----------------------------");

其中XmlUtils类有下一个代码:

代码语言:javascript
复制
public class XmlUtils
{
    static public String format(String unformattedXml)
    {
        StringWriter writer = new StringWriter();
        try
        {
            Document doc = parseXml(unformattedXml);

            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer transformer = tf.newTransformer();
            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");          
            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");                

            transformer.transform(new DOMSource(doc), new StreamResult(writer));
            writer.close();
        }
        catch(Exception ex)
        {
            return unformattedXml;
        }


        return writer.toString();
    }

    private static Document parseXml(String xml) throws IOException, ParserConfigurationException, SAXException
    {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        InputSource is = new InputSource(new StringReader(xml));
        return db.parse(is);        
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6803007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档