Android 如何连接wsdl-soap-webservice和处理数据

Android 如何连接wsdl-soap-webservice和处理数据,android,erp,ksoap,Android,Erp,Ksoap,我正在开发android上的移动销售应用程序,该应用程序集成到我们的erp配置中。我需要帮助。第一次使用ksoap时,我遇到了麻烦 我们用1C:Enterprise开发了一个erp配置,我在1C:Enterprise上编写了webservice。1C提供作为soap、wsdl文件的Web服务。我将分享我的android应用程序代码和wsdl文件 首先,这里是my erp web service wsdl文件: 下面是定义连接参数的类: public class Connection{ publi

我正在开发android上的移动销售应用程序,该应用程序集成到我们的erp配置中。我需要帮助。第一次使用ksoap时,我遇到了麻烦

我们用1C:Enterprise开发了一个erp配置,我在1C:Enterprise上编写了webservice。1C提供作为soap、wsdl文件的Web服务。我将分享我的android应用程序代码和wsdl文件

首先,这里是my erp web service wsdl文件:

下面是定义连接参数的类:

public class Connection{
public static String Url ="http://localhost/BAS/ws/MobileTech.1cws";
public static String Soap_Action = "http://localhost/BAS/ws/MobileTech.1cws?wsdl/GetMobileUsers";
public static String Method_Name = "GetMobileUsers";
public static String Namespace   = "http://localhost/BAS/ws/MobileTech.1cws?wsdl";  
private static Connection instance = null;  
private Connection()
{       
}

public static Connection getInstance()
{
    if(instance == null)
    {
        instance = new Connection();
    }
    return instance;
}}  
这是我用ksoap2向webservice发出的请求,我想解释一下,这个代码在类中的doInBackground中表示什么是扩展异步任务:

Connection conn = Connection.getInstance();
    SoapObject request = new SoapObject(conn.Namespace,conn.Method_Name);
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(11);
    envelope.dotNet = true;
    envelope.setOutputSoapObject(request);

    HttpTransportSE httpse = new HttpTransportSE(conn.Url);
    ArrayList<HeaderProperty> headerList = new ArrayList<HeaderProperty>();
    headerList.add(new HeaderProperty("Authorization", "Basic " + Base64.encode("Administrator:17870505".getBytes())));
    try 
    {
        httpse.call(conn.Soap_Action, envelope, headerList);
        SoapObject response = (SoapObject)envelope.getResponse();
        Log.e("x", response.toString());
    } catch (Exception e) {Log.e("hata :", e.toString());}
    return filled;
}
我得到了这些例外:

10-09 14:32:27.300:E/x2666:MobileTech.db oluşturluyor 10-09 14:32:27.356:E/AndroidRuntime2666:致命异常:异步任务1 10-09 14:32:27.356:E/AndroidRuntime2666:Process:com.example.mobiletech,PID:2666 10-09 14:32:27.356:E/AndroidRuntime2666:java.lang.RuntimeException:执行doInBackground时出错 10-09 14:32:27.356:E/AndroidRuntime2666:at android.os.AsyncTask$3.doneAsyncTask.java:300 10-09 14:32:27.356:E/AndroidRuntime2666:at java.util.concurrent.FutureTask.finishCompletionFutureTask.java:355 10-09 14:32:27.356:E/AndroidRuntime2666:at java.util.concurrent.FutureTask.setExceptionFutureTask.java:222 10-09 14:32:27.356:E/AndroidRuntime2666:at java.util.concurrent.FutureTask.runFutureTask.java:242 10-09 14:32:27.356:E/AndroidRuntime2666:at android.os.AsyncTask$SerialExecutor$1.runAsyncTask.java:231 10-09 14:32:27.356:E/AndroidRuntime2666:at java.util.concurrent.ThreadPoolExecutor.runWorkerThreadPoolExecutor.java:1112 10-09 14:32:27.356:E/AndroidRuntime2666:at java.util.concurrent.ThreadPoolExecutor$Worker.runThreadPoolExecutor.java:587 10-09 14:32:27.356:E/AndroidRuntime2666:at java.lang.Thread.runThread.java:818 10-09 14:32:27.356:E/AndroidRuntime2666:原因:java.lang.NoClassDefFoundError:解析失败:Lorg/ksoap2/serialization/SoapObject; 10-09 14:32:27.356:E/AndroidRuntime2666:com.mobiletech.db.ServiceGetDatas.doInBackgroundServiceGetDatas.java:21 10-09 14:32:27.356:E/AndroidRuntime2666:com.mobiletech.db.ServiceGetDatas.doInBackgroundServiceGetDatas.java:1 10-09 14:32:27.356:E/AndroidRuntime2666:at android.os.AsyncTask$2.callAsyncTask.java:288 10-09 14:32:27.356:E/AndroidRuntime2666:at java.util.concurrent.FutureTask.runFutureTask.java:237 10-09 14:32:27.356:E/AndroidRuntime2666:。。。4更多 10-09 14:32:27.356:E/AndroidRuntime2666:原因:java.lang.ClassNotFoundException:在路径:DexPathList[[zip文件/data/app/com.example.mobiletech-1/base.apk],NativeLibraryDirectory=[/vendor/lib,/system/lib]]上未找到类org.ksoap2.serialization.SoapObject 10-09 14:32:27.356:E/AndroidRuntime2666:at dalvik.system.BaseDexClassLoader.findClassBaseDexClassLoader.java:56 10-09 14:32:27.356:E/AndroidRuntime2666:at java.lang.ClassLoader.LoadClassLoader.java:511 10-09 14:32:27.356:E/AndroidRuntime2666:at java.lang.ClassLoader.LoadClassLoader.java:469 10-09 14:32:27.356:E/AndroidRuntime2666:。。。8个以上 10-09 14:32:27.356:E/AndroidRuntime2666:抑制:java.lang.ClassNotFoundException:org.ksoap2.serialization.SoapObject 10-09 14:32:27.356:E/AndroidRuntime2666:at java.lang.Class.classForNameNative方法 10-09 14:32:27.356:E/AndroidRuntime2666:at java.lang.BootClassLoader.FindClassLoader.java:781 10-09 14:32:27.356:E/AndroidRuntime2666:at java.lang.BootClassLoader.LoadClassLoader.java:841 10-09 14:32:27.356:E/AndroidRuntime2666:at java.lang.ClassLoader.LoadClassLoader.java:504 10-09 14:32:27.356:E/AndroidRuntime2666:。。。9更多 10-09 14:32:27.356:E/AndroidRuntime2666:原因:java.lang.NoClassDefFoundError:使用引导类加载程序找不到类;没有可用的堆栈

我解决不了这个问题?你能帮我一下吗,我的错在哪里


我想添加,我向AndroidManifest文件添加了Intenet权限。

请确保您在项目中添加了ksoap2库,并使用在ksoap2 v2.4中测试过的代码,这个答案不是您的答案,只是我试图向您解释这是如何工作的。请测试并确保库存在

创建类WebService:

package com.test.myapp;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class WebService {

    public static String invokeWS(String VAR_METHOD_1, String VAR_METHOD_2) {
        String resTxt;
        String webMethName = "YOUR_METHOD_NAME";
        // Create request
        String NAMESPACE = "http://tempuri.org/";
        SoapObject request = new SoapObject(NAMESPACE, webMethName);
        // Property which holds input parameters
        PropertyInfo FIRST_PARAMETER = new PropertyInfo();
        // Property which holds input parameters
        PropertyInfo SECOND_PARAMETER = new PropertyInfo();

        // Set Name
        FIRST_PARAMETER.setName("NAME_1");
        // Set Value
        FIRST_PARAMETER.setValue(VAR_METHOD_1);
        // Set dataType
        FIRST_PARAMETER.setType(String.class);
        // Add the property to request object

        // Set Name
        SECOND_PARAMETER.setName("NAME_2");
//      // Set Value
        SECOND_PARAMETER.setValue(VAR_METHOD_2);
//      // Set dataType
        SECOND_PARAMETER.setType(String.class);

        request.addProperty(FIRST_PARAMETER);
        request.addProperty(SECOND_PARAMETER);

        // Create envelope
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.dotNet = true;
        // Set output SOAP object
        envelope.setOutputSoapObject(request);
        // Create HTTP call object
        String URL = "YOUR_URL_WEBSERVICE";
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

        try {
            // Invole web service
            String SOAP_ACTION = "http://tempuri.org/";
            androidHttpTransport.call(SOAP_ACTION +webMethName, envelope);
            // Get the response
            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
            // Assign it to fahren static variable
            resTxt = response.toString();

        } catch (Exception e) {
            e.printStackTrace();
            resTxt = "Error occured";
        } 

        return resTxt;
    }
}
在您的doInBackground中,将此用于返回字符串结果:

return WebService.invokeWS(VAR_1,VAR_2);

你确定你添加的ksoap是正确的吗?原因是:java.lang.ClassNotFoundException:找不到类org.ksoap2.serialization.SoapObject onyes我确定,我在得到异常后进行了检查让我问你一件事。这个erp系统提供SOAPWeb服务,但我们可以只看到wsdl文件,也可以只请求wsdl文件?我该怎么做?因为可能就是这个原因。