【问题标题】:Connecting Android webservices to localhost将 Android 网络服务连接到 localhost
【发布时间】:2014-01-14 03:29:53
【问题描述】:

我正在与这个特殊的事情作斗争,但无法解决它。请帮助我... 我正在尝试将 android 程序连接到在 apache 服务器上运行的本地主机。

我在互联网上找到了直接连接到他们自己网站的示例。因此,他们为名称空间(在以下程序中)提供了名称空间。 但是,由于我的 Web 应用程序位于本地主机中,我应该提什么?

(我在这里粘贴我的代码) MainActivity.java

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

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends Activity {

    private String METHOD_NAME = "sum"; // our webservice method name
    private String NAMESPACE = "http://calculator.backend.web.org&#8221"; //I have to give the name space here I guess
    private String SOAP_ACTION = NAMESPACE + METHOD_NAME; 
    private static final String URL = "http://localhost:8081/Test/services/Caluclate?wsdl"; 

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView tv = (TextView) findViewById(R.id.txtAddition);
    try
    {
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("i", 5);
        request.addProperty("j", 15);
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        androidHttpTransport.call(SOAP_ACTION,envelope);
        Object result = envelope.getResponse();
        System.out.println(" Result : "  + result.toString());
        ((TextView) findViewById (R.id.txtAddition)).setText("Addition : "+result.toString());
        } catch (Exception E) {
            E.printStackTrace();
            ((TextView) findViewById (R.id.txtAddition)).setText("Error: "   + E.getClass().getName() + ":" + E.getMessage());
        }
    }
}

Calculate.java(网络应用程序中的程序)

public class Caluclate {
    public int sum() {
         return (1);
   }
   public int subtract(int i, int j) {
         return (i - j);
   }
   public int multiply(int i, int j) {
         return (i * j);
   }
   public int divide(int i, int j) {
         return (i / j);
   }
}

谢谢你帮助我...

【问题讨论】:

  • localhost 替换为 127.0.0.1 或 10.0.2.2

标签: android web-services localhost


【解决方案1】:

我假设服务端点在远程机器上运行,而不是直接在移动设备上运行。

在这种情况下 localhost 将不起作用,因为它是 127.0.0.1 的本地别名,它解析为自身。

目前,在您的代码中,每台设备都会尝试访问自己托管的服务。您必须将 localhost 替换为托管端点的服务器的 ip

【讨论】:

  • 您好,感谢您的回复。我听从了你的建议。我也尝试了 127.0.0.1 和 10.0.2.2 以及我的系统 IP 地址.. 但仍然没有运气。并且错误显示在 SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
  • 嗨@BaradwajAryasomayajula,您的物理托管服务在哪里?
  • 嗨@Jmorvan 我正在使用本地主机本身的mysql和jsp将数据存储在数据库中。
  • 好的,根据您的说法,您的主机的 IP 地址似乎是 10.0.2.2,这是您应该使用的(如果它没有更改)连接到您的服务。如果这不起作用,则可能是防火墙问题。检查端口 8081(您使用的端口)是否对传入流量开放。
  • 没有。它没有用.. 所以我继续使用 parse.com 将数据存储在云中并在我的手机中提取数据
【解决方案2】:

你可以使用:

private static final String URL = "http:// 10.0.2.2:8081/Test/services/Caluclate?wsdl"; 

【讨论】:

    【解决方案3】:

    您好,朋友找到您的 PC 分配的 IP(转到 CMD 并键入 ipconfig 并找到 IP 地址)将“Localhost”替换为该 IP 地址。这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 2013-11-18
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多