调用Web服务时出错

时间:2011-11-30 00:14:13

标签: java android web-services ksoap

我正在尝试通过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服务正在运行和测试。

6 个答案:

答案 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";

我的错误在哪里? (我也使用kso​​ap 2.4)

答案 5 :(得分:-1)

private static final String SOAP_ACTION = "http://localhost:7675/market_helper/services/insertProduct"; 

SOAP ACTION=NAMESPACE+METHOD NAME;