因此,我在 Web 服务方面做了一些“次要”的事情并取得了一些成功,但是当我试图修补一些有趣的东西时,我遇到了我认为我错误地解析数据以获取所需信息的情况. 我可以将整个 xml 作为字符串获取,而不仅仅是我需要的 3 个程序。getPrograms 和 getInstitutions 非常相似,如果我能正确解析程序部分,我就能得到机构。我感到困惑的地方是我认为“标签”以及它们与任何教程与我实际使用的内容有何不同。我也采用了 XmlPullParser 的方式,但不知道这是否是这样做的最佳方式(是吗?)。我正在访问的格式如下:
<DataSet>
<xs:schema id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="tblPrograms">
<xs:complexType>
<xs:sequence>
<xs:element name="Program" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram>
<NewDataSet>
<tblPrograms diffgr:id="tblPrograms1" msdata:rowOrder="0">
<Program>Ancillary</Program>
</tblPrograms>
<tblPrograms diffgr:id="tblPrograms2" msdata:rowOrder="1">
<Program>Ancillary ESY</Program>
</tblPrograms>
<tblPrograms diffgr:id="tblPrograms3" msdata:rowOrder="2">
<Program>REAP</Program>
</tblPrograms>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
我的源代码如下:
public class FirstScreen extends Activity {
/** Called when the activity is first created. */
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://www.ces.org/android/android.asmx";//must point to where service is located
/** HelloAndroid method */
//SOAP_ACTION = NAMESPACE + METHODNAME
private static final String SOAP_ACTION = "http://tempuri.org/HelloAndroid";
private static final String METHOD_NAME = "HelloAndroid";
/** SelectInstitutionTypes method */
//SOAP_ACTION = NAMESPACE + METHODNAME
private static final String SOAP_ACTION_INSTITUTIONS = "http://tempuri.org/SelectInstitutionTypes";
private static final String METHOD_NAME_INSTITUTIONS = "SelectInstitutionTypes";
/** SelectPrograms method */
//SOAP_ACTION = NAMESPACE + METHODNAME
private static final String SOAP_ACTION_PROGRAMS = "http://tempuri.org/SelectPrograms";
private static final String METHOD_NAME_PROGRAMS = "SelectPrograms";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getHelloAndroid();
//getInstitutionTypes();
getPrograms();
}//end of onCreate
private void getPrograms() {
TextView tv3 = (TextView)findViewById(R.id.TextView03);//contains SelectInstitutionTypes information
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_PROGRAMS);
//soap serialization
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//running 1.1
soapEnvelope.dotNet=true;//to handle .net services asmx/aspx
soapEnvelope.setOutputSoapObject(request);//package request
//create transport object(s)
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.debug = true;
//make the call
aht.call(SOAP_ACTION_PROGRAMS, soapEnvelope); //in/out
SoapObject resultString = (SoapObject)soapEnvelope.getResponse();
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
xpp.setInput(new StringReader (resultString.toString()));
int eventType = xpp.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT){
if(eventType == XmlPullParser.START_DOCUMENT) {
System.out.println("Start document");
} else if(eventType == XmlPullParser.START_TAG) {
if(xpp.getName().equals("Program"))
System.out.println("Start tag "+xpp.getName());
System.out.println("Program"+ xpp.getAttributeName(0));
} else if(eventType == XmlPullParser.END_TAG) {
System.out.println("End tag "+xpp.getName());
} else if(eventType == XmlPullParser.TEXT) {
System.out.println("Text "+xpp.getText());
}
eventType = xpp.next();
}
System.out.println("End document");
tv3.setBackgroundColor(Color.BLUE);
tv3.setText("STATUS: " + resultString /*ks.toString()*/ + "\n\n" + "AHTHOST: " +
aht.getHost() + "\n\n" + "NAHT STRING: " + aht.toString());
}
catch(Exception e)
{
e.toString();
e.printStackTrace();
tv3.setText("EXCEPTION NAME: " + e.toString().toString() +
"\n\n" + "EXCEPTION MESSAGE: " + e.getMessage() + " ");
}
}//end of getPrograms
private void getInstitutionTypes() {
TextView tv2 = (TextView)findViewById(R.id.TextView02);//contains SelectInstitutionTypes information
//tv2.setText("TODO: SelectInstitutionTypes");
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_INSTITUTIONS);
//soap serialization
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//running 1.1
soapEnvelope.dotNet=true;//to handle .net services asmx/aspx
soapEnvelope.setOutputSoapObject(request);//package request
//create transport object(s)
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.debug = true;
//make the call
aht.call(SOAP_ACTION_INSTITUTIONS, soapEnvelope); //in/out
SoapObject resultString = (SoapObject)soapEnvelope.getResponse();
tv2.setText("STATUS: " + resultString /*ks.toString()*/ + "\n\n" + "AHTHOST: " +
aht.getHost() + "\n\n" + "NAHT STRING: " + aht.toString());
}
catch(Exception e)
{
e.toString();
e.printStackTrace();
tv2.setText("EXCEPTION NAME: " + e.toString().toString() +
"\n\n" + "EXCEPTION MESSAGE: " + e.getMessage() + " ");
}
}//end of getInstitutionTypes
public void getHelloAndroid() {
TextView tv = (TextView)findViewById(R.id.TextView01);//contains HelloAndroid information
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
//soap serialization
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//running 1.1
soapEnvelope.dotNet=true;//to handle .net services asmx/aspx
soapEnvelope.setOutputSoapObject(request);//package request
//create transport object(s)
HttpTransportSE aht = new HttpTransportSE(URL);
try
{
aht.debug = true;
//make the call
aht.call(SOAP_ACTION, soapEnvelope); //in/out
SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
tv.setBackgroundColor(Color.BLUE);
tv.setText("STATUS: " + resultString + "\n\n" + "AHTHOST: " +
aht.getHost() + "\n\n" + "NAHT STRING: " + aht.toString());
}
catch(Exception e)
{
e.toString();
e.printStackTrace();
tv.setText("EXCEPTION NAME: " + e.toString().toString() +
"\n\n" + "EXCEPTION MESSAGE: " + e.getMessage() + " ");
}
}//end of getHelloAndroid
}//end of activity