Pregunta

Estoy tratando de llamar a un servicio web desde mi aplicación Android. Implementé un servicio web que inserta un registro (código de barras de producto, nombre del producto) con Hibernate en Java y escribí una actividad para probarlo.

Cuando lo ejecuto en mi AVD obtuve una conexión de conexión: Connection refused

Aquí está mi código:

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();
        }
    }
}

Es mi primer servicio web en Android y no estoy seguro de si el código es correcto. Estoy llamando a un método que llamó insertProduct(String barCode,String productName). El servicio web está funcionando y probado.

¿Fue útil?

Solución

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

Has dado localhost

Pruebe con la dirección IP en lugar de localhost

Me gusta esto

   private static final String SOAP_ACTION = "http://10.120.159.87:7675/market_helper/services/Main"; 

Otros consejos

En su AndroidManifest.xml, asegúrese de tener un conjunto de permisos de Internet, estaba teniendo el mismo problema una vez que configuré esto, todo funcionó muy bien.

<uses-permission android:name="android.permission.INTERNET" />
private static final String URL = "http://localhost:7675/market_helper/services/Main?wsdl";

En esta línea, está mal poner "? WSDL" al final de la URL, eliminarlo y poner la extensión (.asmx o .svc) de su servicio web al final en lugar de él. Como ...

private static final String URL = "http://localhost:7675/market_helper/services/Main.asmx";

Gracias por ayudarme, he solucionado mi problema con la URL
Usé el comando ipconfig para obtener mi IP local
El puerto 7675 es utilizado por mi servidor Apache Tomcat
Agregué el puerto a mi puerto de excepción de firewall para asegurarme de que funcione.

y no hay un archivo asmx que cambié? wsdl
Ahora puedo ver la descripción de WSDL de mi navegador.

Tengo el espacio de nombres del archivo XML "main.wsdl"
<schema elementFormDefault="qualified" targetNamespace="http://app.market_helper.com" xmlns="http://www.w3.org/2001/XMLSchema">

El código correcto está aquí: 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";
Ahora puedo usar el servicio web ahora desde mi aplicación Android.
Envío mi código correcto para las personas que tienen el mismo problema que yo.

Puedo ver cuando abro Explorer. Yo uso este sitio web

"http: // host local: 49674/servicio.svc"

¿Qué debería de escribir? Siempre recibo error al intentar atrapar. Usé WCF en .NET WebService. y 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";

¿Dónde está mi error? (También uso KSOAP 2.4)

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

SOAP ACTION=NAMESPACE+METHOD NAME;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top