解析来自于Android的SOAP响应数据 [英] Parse data from SOAP response in Android
本文介绍了解析来自于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屋!
查看全文