我正在尝试通过Android应用调用网络服务。我部署了一个Web服务,用Java中的Hibernate插入记录(产品条形码,产品名称),我编写了一个活动来测试它。
当我在AVD上运行时,我得到了一个connectionException:Connection refused
这是我的代码:
package com.market_helper.app;
import android.R.string;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.serialization.PropertyInfo;
public class Market_helper_androidActivity extends Activity {
private static final String SOAP_ACTION = "http://localhost:7675/market_helper/services/Main";
private static final String METHOD_NAME = "insertProduct";
private static final String NAMESPACE = "http://localhost:7675/market_helper/services/";
private static final String URL = "http://localhost:7675/market_helper/services/Main?wsdl";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("barCode", "12345");
request.addProperty("productName", "abc");
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
Object result = envelope.getResponse();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这是我在Android上的第一个网络服务,我不确定代码是否正确。我正在调用一个名为insertProduct(String barCode,String productName)
的方法。 Web服务正在运行和测试。
答案 0 :(得分:1)
private static final String SOAP_ACTION = "http://localhost:7675/market_helper/services/Main";
您已经提供了LocalHost
尝试使用ip地址而不是LocalHost
喜欢这个
private static final String SOAP_ACTION = "http://10.120.159.87:7675/market_helper/services/Main";
答案 1 :(得分:0)
在您的AndroidManifest.xml中,请确保您设置了Internet权限,一旦我设置了这一切,我遇到了同样的问题。
<uses-permission android:name="android.permission.INTERNET" />
答案 2 :(得分:0)
private static final String URL = "http://localhost:7675/market_helper/services/Main?wsdl";
在这一行中放置&#34;?wsdl&#34;是错误的。在URL的末尾删除它并将ur webservice的扩展名(.asmx或.svc)放在最后而不是它。就像......
private static final String URL = "http://localhost:7675/market_helper/services/Main.asmx";
答案 3 :(得分:0)
感谢您帮助我解决了我的问题
url
我使用ipconfig命令获取本地IP
我的apache tomcat服务器使用端口7675
我将端口添加到防火墙例外端口以确保它可以正常工作。
并且我没有更改asmx文件?wsdl
现在我可以从浏览器中看到wsdl描述。
我的命名空间来自xml文件“main.wsdl”
<schema elementFormDefault="qualified" targetNamespace="http://app.market_helper.com" xmlns="http://www.w3.org/2001/XMLSchema">
正确的代码在这里:
private static final String SOAP_ACTION = "http://app.market_helper.com/insertProduct";
private static final String METHOD_NAME = "insertProduct";
private static final String NAMESPACE = "http://app.market_helper.com";
private static final String URL = "http://192.168.1.2:7675/market_helper/services/Main?wsdl";
现在,我可以从我的Android应用程序中使用Web服务
我会向遇到与我有同样问题的人发回正确的代码。
答案 4 :(得分:0)
当我打开资源管理器时,我可以看到。我使用这个网站
“http://本地主机:49674 / Service.svc”
我应该写什么?我总是在try catch中得到错误。我在.net webservice中使用了WCF。和EntityFramework。
private final String NAMESPACE="http://tempuri.org/IService/"; private final String SOAPACTION="http://tempuri.org/IService/GetTreatmentValues"; private final String METHODNAME="GetTreatmentValues"; private final String URL="http:// local host:49674/Service.svc";
我的错误在哪里? (我也使用ksoap 2.4)
答案 5 :(得分:-1)
private static final String SOAP_ACTION = "http://localhost:7675/market_helper/services/insertProduct";
SOAP ACTION=NAMESPACE+METHOD NAME;