我做了很多研究并试图解决它,但是我面临着在屏幕上显示响应的问题。

肥皂服务代码为:

POST /ws1.asmx HTTP/1.1
Host: www.xyz.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://xyx.com/webservices/LoadServices"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <LoadServices xmlns="http://xyz.com/webservices/" />
  </soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <LoadServicesResponse xmlns="http://xyz.com/webservices/">
      <LoadServicesResult>
        <anyType />
        <anyType />
      </LoadServicesResult>
    </LoadServicesResponse>
  </soap:Body>
</soap:Envelope>


我在Java中使用2类。这是它的代码。

首先,我添加Category.java代码:

import java.util.Hashtable;
import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;

import android.util.Log;

public class Category implements KvmSerializable
{
    public int CompanyId;               //0
    public int ServiceId;               //1
    public String ServiceMessage;       //2
    public int ServiceCategoryId;       //3
    public boolean IsVisibleForUser;    //4
    public String ServiceName;          //5
    public String Serviceform;          //6
    public char IsActive;               //7
    public String ServiceImage;         //8
    public String ServiceCode;          //9
    public String RequestFulfilledMsg;  //10
    public String ToDoPendingRequest;   //11
    public String CompanyName;          //12
    public String ServiceCategoryName;  //13
    public String ThumbnailImage;       //14
    public String ServiceDescription;   //15





    public Category()
    {}

     public Category(int coid, int servId, int scid)
     {
         CompanyId = coid;
         ServiceId = servId;
         ServiceCategoryId = scid;

     }


    public Object getProperty(int arg0)
    {
        Log.i("Category", "msg:getProperty");
        switch(arg0)
        {
        case 0:
            return CompanyId;

        case 1:
            return ServiceId;

        case 3:
            return ServiceCategoryId;

        }

        return null;
    }




    public int getPropertyCount()
    {
        Log.i("Category", "msg:getPropertyCount(3)");
        return 3;
    }

    public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info)
    {
        Log.i("Category", "msg:getPropertyInfo");
        switch (index)
        {
        case 0:
            info.type = PropertyInfo.INTEGER_CLASS;
            info.name = "CompanyId";
            break;

        case 1:
            info.type = PropertyInfo.INTEGER_CLASS;
            info.name = "ServiceId";
            break;

        case 3:
            info.type = PropertyInfo.INTEGER_CLASS;
            info.name = "ServiceCategoryId";
            break;


            default:
                break;
        }

    }


    public void setProperty(int index, Object value)
    {
        Log.i("Category", "msg:SetProperty");
        switch (index)
        {

        case 0:
            CompanyId = Integer.parseInt(value.toString());
            break;

        case 1:
            ServiceId = Integer.parseInt(value.toString());
            break;

        case 3:
            ServiceCategoryId = Integer.parseInt(value.toString());
            break;


        default:
            break;
        }

    }

}


现在是根活动的代码,即WebServiceEx.java

public class WebServiceEx extends Activity
{
    private final String NAMESPACE = "http://xyz.com/webservices/";
    private final String URL = "http://www.abc.com/ws1.asmx";
    private final String SOAP_ACTION = "http://xyz.com/webservices/LoadServices";
    private final String METHOD_NAME = "LoadServices";

    //public Array array = null;
    //String arr[] = null;

    TextView tv;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        tv = new TextView(this);

        LoadSoapService();
        setContentView(tv);
    }


    private void LoadSoapService()
    {
        Log.i("WebService", "msg:soap enter");
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);


        Category C = new Category();
        C.ServiceCategoryId = 1;
        Log.i("WebService", "msg:Category");

        Log.i("WebService", "msg:Property");

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

        Log.i("WebService", "msg:Request");

        envelope.addMapping(NAMESPACE, "Category", new Category().getClass());

        HttpTransportSE transportSE = new HttpTransportSE(URL);

        Log.i("WebService", "msg:try_out");
        try
        {
                                Log.i("WebService", "msg:try+in");
            transportSE.call(SOAP_ACTION, envelope);
                                Log.i("WebService", "msg:SoapObject");
            SoapObject response = (SoapObject)envelope.getResponse();               /**error here, wents to exception **/

                                Log.i("WebService", "Response");

                                Log.i("WebSrv", response.toString());


            C.ServiceCategoryId = Integer.parseInt(response.getProperty(3).toString());

            tv.setText(" "+C.ServiceCategoryId);


        }
        catch (Exception e)
        {
            e.printStackTrace();
            Log.i("WebService", "msg:Exception error");
        }

    }
}


我在发生问题的地方添加了注释,此外,如果我错过了什么,请告诉我,因为一切都在您的面前。

我已经将ksoap2添加到了外部Jar中,并且添加了Internet权限,我所遇到的只是空白屏幕。

希望有一些想法,

谢谢,
哈普雷特。

最佳答案

如果我是你,我会

private void LoadSoapService()


该方法如下:

private String LoadSoapService()


返回Integer.parseInt(response.getProperty(3).toString());
并将TextViews文本设置为

tv.setText(LoadSoapService);

关于android - 在Android中显示肥皂响应(数组),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9176491/

10-10 20:21