Android 如何连接wsdl-soap-webservice和处理数据
我正在开发android上的移动销售应用程序,该应用程序集成到我们的erp配置中。我需要帮助。第一次使用ksoap时,我遇到了麻烦 我们用1C:Enterprise开发了一个erp配置,我在1C:Enterprise上编写了webservice。1C提供作为soap、wsdl文件的Web服务。我将分享我的android应用程序代码和wsdl文件 首先,这里是my erp web service wsdl文件: 下面是定义连接参数的类: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
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文件?我该怎么做?因为可能就是这个原因。