0

我想学习如何在 Android 中使用 webSservices。目前,我有一个带有 wsdl 文件的服务器,我可以从中调用所需的 Web 服务。

我的问题是我得到了服务器的响应,我想提取一些对我来说很有趣的信息,例如用户 ID 或类似的东西。

这是我的代码:

public class TestBookSoapActivity extends Activity {

private static final String SOAP_ACTION = "JournalArticles";
private static final String METHOD_NAME = "JournalArticles";
private static final String NAMESPACE = "http://api.mdpi.com/ws/";
private static final String URL = "http://api.mdpi.com/ws/server.php";


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    executeAppelSOAP();  
}

private void executeAppelSOAP() {
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("JournalID", 1);
    request.addProperty("Volume", 12);
    request.addProperty("Issue", 1);

    SoapSerializationEnvelope enveloppe = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    enveloppe.setOutputSoapObject(request);
    AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport (URL);             
    try {
        androidHttpTransport.call(SOAP_ACTION, enveloppe);
        Object resultat = enveloppe.getResponse();
        System.out.println(" Journal Articles= " + resultat.toString());
    } catch(Exception e) {
        e.printStackTrace();
        System.out.println("Problem");
    }
}

我可以使用 enveloppe.parse() 方法吗?如果可以,如何使用?

谢谢你。

4

1 回答 1

1

您应该采取两个步骤:

  1. 获取正确的 XML 值
  2. 解析 XML

关于 1...
我更喜欢HttpTransportSE而不是:

AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport (URL);

采用:

HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

然后代替:

Object resultat = enveloppe.getResponse();    

采用:

SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
String xml = response.toString();

您还可以使用调试器检查响应的外观。您可以在此问题的答案中阅读更多详细信息。

大约 2...
您可以使用任何 XML 解析器。出于性能原因,我更喜欢 SAX。这是一个Android示例:如何在Android中解析XML

问候,
德拉甘

于 2012-02-07T10:45:45.530 回答