解析来自于Android的SOAP响应数据 [英] Parse data from SOAP response in Android

查看:224
本文介绍了解析来自于Android的SOAP响应数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的肥皂输出:

  tabResponse
{
  tabResult = anyType的
 {
   模式= anyType的
  {
    元= anyType的
     {复杂类型= anyType的
       {
        选择= anyType的
       {
         元= anyType的
        {
        复杂类型= anyType的
         {
         序列= anyType的
         {
         元= anyType的{};
         元= anyType的{};
           元= anyType的{};
          元= anyType的{};
              };
             };
           };
           };
              };
               };
              };
          的DiffGram = anyType的
          {
          DocumentElement = anyType的
         {SH = anyType的
            {SchoolName =比亚利克希伯来日学校; SchoolType =公立小学; SchoolGrade = JK-12;市=多伦多;
          };
          SH = anyType的
          {SchoolName =米尔伍德小学; SchoolType =公立小学; SchoolGrade = JK-12;市=多伦多;
           };
          SH = anyType的
           {SchoolName = Dovercourt小型公立学校; SchoolType =公立小学; SchoolGrade = JK-12;市=多伦多;
           };
          SH = {anyType的
           SchoolName =约翰英语初中; SchoolType =公立小学; SchoolGrade = JK-12;市=多伦多;
           };
         SH = anyType的
         {SchoolName = Ossington老果园公立学校; SchoolType =公立小学; SchoolGrade = JK-12;市=多伦多;
           };
           };
            };
            };
           }
 

和我的code是这样的:

  SoapDemoActivity.java

公共类SoapDemoActivity延伸活动{

私人最终字符串NAMESPACE =****;
私人最终字符串URL =*******;
私人最终字符串SOAP_ACTION_1 =********;
私人最终字符串SOAP_ACTION_5 =*******;
私人最终字符串METHOD_NAME_5 =******;
按钮mButtonTab;
TextView的mTextViewResult;

@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
      mButtonTab =(按钮)findViewById(R.id.button5);
      mButtonTab.setOnClickListener(新View.OnClickListener(){

        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            getDataTable(命名空间METHOD_NAME_5,SOAP_ACTION_5,URL);

        }
    });
 }
  公共无效getDataTable(字符串名称空间字符串METHOD_NAME,
        字符串SOAP_ACTION,字符串URL){
    // TODO自动生成方法存根
    SoapObject请求=新SoapObject(命名空间METHOD_NAME);

    request.addProperty(流体,29);


    SoapSerializationEnvelope包=新SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = TRUE;
    envelope.setOutputSoapObject(要求);
    HttpTransportSE androidHttpTransport =新HttpTransportSE(URL);

    尝试 {
        androidHttpTransport.call(SOAP_ACTION,包);
        SoapObject响应=(SoapObject)envelope.bodyIn;


        如果(响应!= NULL)
        {

            SoapObject tabResponse =(SoapObject)response.getProperty(0);

            SoapObject tabResult =(SoapObject)tabResponse .getProperty(0);
            SoapObject schmea =(SoapObject)tabResult .getProperty(0);
            SoapObject elmemnt =(SoapObject)schmea .getProperty(0);
            SoapObject的complexType =(SoapObject)elmemnt .getProperty(0);
            SoapObject的choise =(SoapObject)的complexType .getProperty(0);
            SoapObject element_1 =(SoapObject)的choise .getProperty(0);
            SoapObject complextype_1 =(SoapObject)element_1 .getProperty(0);
            SoapObject序列=(SoapObject)complextype_1 .getProperty(0);
            SoapObject element_2 =(SoapObject)序列.getProperty(0);
            SoapObject element_3 =(SoapObject)element_2 .getProperty(0);
            SoapObject element_4 =(SoapObject)element_3 .getProperty(0);
            SoapObject element_5 =(SoapObject)element_4 .getProperty(0);
            SoapObject的DiffGram =(SoapObject)element_5 .getProperty(0);
            SoapObject documentelement =(SoapObject)的DiffGram .getProperty(0);
            的for(int i = 0; I< documentelement.getPropertyCount();我++)
            {
                SoapObject getAllData =(SoapObject)documentelement.getProperty(ⅰ);
                如果(getAllData的instanceof SoapObject){
                    字符串数据= getAllData.getProperty(SH)的toString()。
                    的System.out.println(DATA+数据);

                }
            }

        }

        对象重新= NULL;
        重新= envelope.getResponse();
        Log.i(对myApp,response.toString());

        的System.out.println(dfdsfd+ re.toString());
        mTextViewResult.setText(re.toString());

    }赶上(例外五){
        e.printStackTrace();
    }

}

 }
 

我得到这样一个错误信息:

  3月10日至2号:39:26.892:W / System.err的(1284):java.lang.ArrayIndexOutOfBoundsException:长度= 0;指数= 0
三月10号至2号:39:26.892:W / System.err的(1284):在java.util.Vector.arrayIndexOutOfBoundsException(Vector.java:907)
三月10号至2号:39:26.892:W / System.err的(1284):在java.util.Vector.elementAt(Vector.java:328)
三月10号至2号:39:26.892:W / System.err的(1284):在org.ksoap2.serialization.SoapObject.getProperty(SoapObject.java:139)
三月10号至2号:39:26.892:W / System.err的(1284):在com.demosoap.SoapDemoActivity.getDataTable(SoapDemoActivity.java:241)
三月10号至2号:39:26.900:W / System.err的(1284):在com.demosoap.SoapDemoActivity $ 5.onClick(SoapDemoActivity.java:134)
 

这消息在我的Java文件中的行给在

  SoapObject element_2 =(SoapObject)序列.getProperty(0);
 

我如何解析这个正确?

解决方案

  SoapObject根=(SoapObject)response.getProperty(0);
    SoapObject s_deals =(SoapObject)root.getProperty(DiffGram中);
    SoapObject s_deals_1 =(SoapObject)s_deals.getProperty(DocumentElement);


    的System.out.println(********数:+ s_deals_1.getPropertyCount());

    的for(int i = 0; I< s_deals_1.getPropertyCount();我++)
    {
        对象属性= s_deals_1.getProperty(我);
        如果(财产的instanceof SoapObject)
        {
            SoapObject category_list =(SoapObject)财产;
             mStringSchoolName = category_list.getProperty(SchoolName)的toString()。
             mStringSchoolGrade = category_list.getProperty(SchoolGrade)的toString()。
             。mStringSchoolType = category_list.getProperty(SchoolType)的toString();
             mStringCity = category_list.getProperty(城市)的toString()。

            的System.out.println(mStringSchoolName+ mStringSchoolName);
            的System.out.println(mStringSchoolGrade+ mStringSchoolGrade);
            的System.out.println(mStringSchoolType+ mStringSchoolType);
            的System.out.println(mStringCity+ mStringCity);
        }
    }
 

I have the following soap output:

tabResponse
{
  tabResult=anyType
 {
   schema=anyType
  {
    element=anyType
     {complexType=anyType
       {
        choice=anyType
       {
         element=anyType
        {
        complexType=anyType
         {
         sequence=anyType
         {
         element=anyType{};
         element=anyType{};
           element=anyType{}; 
          element=anyType{};
              };
             }; 
           };
           };
              };
               };
              };
          diffgram=anyType
          {
          DocumentElement=anyType
         {sh=anyType
            {SchoolName=Bialik Hebrew Day School; SchoolType=Public elementary;  SchoolGrade=JK-12; City=Toronto; 
          };
          sh=anyType
          {SchoolName=Millwood Junior School; SchoolType=Public elementary;  SchoolGrade=JK-12; City=Toronto; 
           };
          sh=anyType
           {SchoolName=Dovercourt Junior Public School; SchoolType=Public elementary;  SchoolGrade=JK-12; City=Toronto;
           };
          sh=anyType{
           SchoolName=John English Junior Middle School; SchoolType=Public elementary;  SchoolGrade=JK-12; City=Toronto;
           };
         sh=anyType
         {SchoolName=Ossington Old Orchard Public School; SchoolType=Public elementary;  SchoolGrade=JK-12; City=Toronto; 
           };
           };
            };
            };
           }

And my code is like this:

SoapDemoActivity.java

public class SoapDemoActivity extends Activity {

private final String NAMESPACE = "****";
private final String URL = "*******";
private final String SOAP_ACTION_1 = "********";
private final String SOAP_ACTION_5 = "*******";
private final String METHOD_NAME_5 = "******";
Button mButtonTab;
TextView mTextViewResult;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
      mButtonTab=(Button)findViewById(R.id.button5);
      mButtonTab.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            getDataTable(NAMESPACE,METHOD_NAME_5,SOAP_ACTION_5,URL);

        }
    });
 }
  public void getDataTable(String NAMESPACE, String METHOD_NAME,
        String SOAP_ACTION, String URL) {
    // TODO Auto-generated method stub
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

    request.addProperty("uid","29");


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

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapObject response = (SoapObject)envelope.bodyIn;


        if(response != null)
        {

            SoapObject tabResponse = (SoapObject) response.getProperty(0);

            SoapObject tabResult = (SoapObject) tabResponse .getProperty(0);
            SoapObject schmea = (SoapObject) tabResult .getProperty(0);
            SoapObject elmemnt = (SoapObject) schmea .getProperty(0);
            SoapObject complextype = (SoapObject) elmemnt .getProperty(0);
            SoapObject choise = (SoapObject) complextype  .getProperty(0);
            SoapObject element_1 = (SoapObject) choise .getProperty(0);
            SoapObject complextype_1 = (SoapObject) element_1 .getProperty(0);
            SoapObject sequence = (SoapObject) complextype_1 .getProperty(0);
            SoapObject element_2 = (SoapObject) sequence .getProperty(0);
            SoapObject element_3 = (SoapObject) element_2 .getProperty(0);
            SoapObject element_4 = (SoapObject) element_3 .getProperty(0);
            SoapObject element_5 = (SoapObject) element_4 .getProperty(0);
            SoapObject diffgram = (SoapObject) element_5 .getProperty(0);
            SoapObject documentelement = (SoapObject) diffgram .getProperty(0);
            for(int i=0;i<documentelement.getPropertyCount();i++) 
            {
                SoapObject getAllData = (SoapObject) documentelement.getProperty(i);
                if (getAllData instanceof SoapObject) {
                    String data= getAllData.getProperty("sh").toString();
                    System.out.println("DATA "+data);

                }
            }

        }

        Object re= null;
        re = envelope.getResponse();
        Log.i("myApp", response.toString());

        System.out.println("dfdsfd "+re.toString());
        mTextViewResult.setText(re.toString());

    } catch (Exception e) {
        e.printStackTrace();
    }

}

 }

I get an error message like:

10-02 03:39:26.892: W/System.err(1284): java.lang.ArrayIndexOutOfBoundsException:   length=0; index=0
10-02 03:39:26.892: W/System.err(1284):     at  java.util.Vector.arrayIndexOutOfBoundsException(Vector.java:907)
10-02 03:39:26.892: W/System.err(1284):     at java.util.Vector.elementAt(Vector.java:328)
10-02 03:39:26.892: W/System.err(1284):     at org.ksoap2.serialization.SoapObject.getProperty(SoapObject.java:139)
10-02 03:39:26.892: W/System.err(1284):     at com.demosoap.SoapDemoActivity.getDataTable(SoapDemoActivity.java:241)
10-02 03:39:26.900: W/System.err(1284):     at com.demosoap.SoapDemoActivity$5.onClick(SoapDemoActivity.java:134)

This message give at line in my java file at

    SoapObject element_2 = (SoapObject) sequence .getProperty(0);

How can I parse this correctly?

解决方案

    SoapObject root = (SoapObject) response.getProperty(0);
    SoapObject s_deals = (SoapObject) root.getProperty("diffgram");
    SoapObject s_deals_1 = (SoapObject) s_deals.getProperty("DocumentElement");


    System.out.println("********Count : "+ s_deals_1.getPropertyCount());

    for (int i = 0; i < s_deals_1.getPropertyCount(); i++) 
    {
        Object property = s_deals_1.getProperty(i);
        if (property instanceof SoapObject)
        {
            SoapObject category_list = (SoapObject) property;
             mStringSchoolName = category_list.getProperty("SchoolName").toString();
             mStringSchoolGrade = category_list.getProperty("SchoolGrade").toString();
             mStringSchoolType = category_list.getProperty("SchoolType").toString();
             mStringCity = category_list.getProperty("City").toString();

            System.out.println("mStringSchoolName "+mStringSchoolName);
            System.out.println("mStringSchoolGrade "+mStringSchoolGrade);
            System.out.println("mStringSchoolType"+mStringSchoolType);
            System.out.println("mStringCity "+mStringCity);
        }
    }

这篇关于解析来自于Android的SOAP响应数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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