Java ksoap2 AsyncTask属性信息未接收到webservice,为什么?

Java ksoap2 AsyncTask属性信息未接收到webservice,为什么?,java,web-services,android-asynctask,ksoap,propertyinfo,Java,Web Services,Android Asynctask,Ksoap,Propertyinfo,我需要向我的web服务发送一些参数并获得结果。我在lib中使用了ksoap2-android-assembly-2.4-jar-with-dependencies.jar,我的web服务工作正常: [WebMethod] public string TestParams(string userName, string password, string startRowIndex, string maximumRows, string OrderType, string I

我需要向我的web服务发送一些参数并获得结果。我在lib中使用了ksoap2-android-assembly-2.4-jar-with-dependencies.jar,我的web服务工作正常:

        [WebMethod]
    public string TestParams(string userName, string password, string startRowIndex, string maximumRows, string OrderType, string IdOpera)
    {
        return userName + " - " + password + " - " + startRowIndex + " - " + maximumRows + " - " + OrderType + " - " + IdOpera;
    }
在主java代码中:

    private class AsyncCall extends AsyncTask<String, Void, SoapObject > {
    @Override
    protected SoapObject doInBackground(String... params) {

        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "doInBackground");
        AsynGetSellList list = new AsynGetSellList();
        AsynGetSellList.setMAIN_REQUEST_URL(MAIN_REQUEST_URL);
        AsynGetSellList.setMETHOD_NAME(METHOD_NAME);
        AsynGetSellList.setNAMESPACE(NAMESPACE);
        AsynGetSellList.setSOAP_ACTION(SOAP_ACTION);
        javab = list.GetSellList(1);

        return javab;
    }

    @Override
    protected void onPreExecute() {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPreExecute");
        pDialog = new ProgressDialog(SellList.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onProgressUpdate");
    }

    @Override
    protected void onPostExecute(SoapObject javab) {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPostExecute");
        pDialog.dismiss();
        if (isCancelled()) {
            finish();
        }
        if (javab!=null){
            fillSells(javab);
        }
    }
}
需要的其他代码部分:

        public PropertyInfo addParam(String name, Object value) {
        PropertyInfo propertyInfo = new PropertyInfo();
        propertyInfo.name = name;
        propertyInfo.type = value == null ? PropertyInfo.OBJECT_CLASS : value.getClass();
        propertyInfo.setValue(value);
        return propertyInfo;
    }

    private final static SoapSerializationEnvelope getSoapSerializationEnvelope(SoapObject request) {
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.implicitTypes = true;
        envelope.setAddAdornments(false);
        envelope.setOutputSoapObject(request);   
        return envelope;
    }
在logcat中检查send params时看到的内容:

TestParams{userName=01395175; password=password; ...}
但是问题是:
result0=--
这意味着(对我来说)web服务没有收到参数。 我试过很多方法,但你们有足够的经验知道问题出在哪里吗?首先让我告诉你,检查网页并改变了许多方式,因此,如果你看到或面临相同的问题,请告诉我……谢谢。

问题解决了,但如何解决?这是由于tempori.org,在我的web服务中用作默认值。我把它改成了我的网址,它就解决了。这真的是一个愚蠢的错误,因为在很多情况下,web服务会正确地回复,就在您收到数据集时,您会遇到一个未知的错误。无论如何,经过一天的全日制尝试和错误解决了。 blogs.msdn.com/b/endpoint/archive/2011/05/12/how-to-eliminate-tempuri-org-from-your-service-wsdl.aspx 如何从WCF服务WSDL中删除tempuri.org 步骤1:在服务契约上声明名称空间

名称空间可以是任何内容。人们通常使用某种形式的URI,但它不必指向实际的网页。通常,人们会在namsepace中使用版本标识符,但是没有关于应该做什么的规则

//从合同中删除tempuri.org

//如果你不想给我们一个常量,把URI放在这里

//[ServiceContract(名称空间=”)]

[ServiceContract(名称空间=常量.名称空间)]

公共接口IService1

{

}

步骤2:在服务上声明名称空间

服务命名空间添加了ServiceBehavior属性。使用常量可以确保契约和服务的命名空间相同

//如果你不想给我们一个常量,把URI放在这里

//[ServiceBehavior(名称空间=”)]

[ServiceBehavior(名称空间=常量.名称空间)]

公共类服务1:IService1

{

}

步骤3:设置绑定命名空间

<services>

  <service name="EliminateTempUri.Service1">

    <!-- Use a bindingNamespace to eliminate tempuri.org -->

    <endpoint address=""

              binding ="basicHttpBinding" 

              bindingNamespace="http://contoso.com/services"

              contract="EliminateTempUri.IService1"

    />

  </service>

</services>

<behaviors>

  <serviceBehaviors>

    <behavior name="">

      <serviceMetadata httpGetEnabled="true" />

      <serviceDebug includeExceptionDetailInFaults="false" />

    </behavior>

  </serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />



我几周前就遇到了这个问题。您的参数用户名、密码、startRowIndex等是否与Web服务中的参数名称完全相同(包括大写字母)?这就是我的问题,当我的Web服务需要参数“username”时,我将username传递给参数“username”。
[OperationContract]

void DoWork();
public void DoWork()

{

}
<services>

  <service name="EliminateTempUri.Service1">

    <!-- Use a bindingNamespace to eliminate tempuri.org -->

    <endpoint address=""

              binding ="basicHttpBinding" 

              bindingNamespace="http://contoso.com/services"

              contract="EliminateTempUri.IService1"

    />

  </service>

</services>

<behaviors>

  <serviceBehaviors>

    <behavior name="">

      <serviceMetadata httpGetEnabled="true" />

      <serviceDebug includeExceptionDetailInFaults="false" />

    </behavior>

  </serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />