Consumir WebService .net / Android (utilizando Eclipse+KSOAP2) Erro androidHttpTransport.call()

Boa tarde,

Meu problema é que ao executar o metodo androidHttpTransport.call(), como ele é chamado dentro do try/cat, as linhas de codigo após ele não são executadas, sendo assim nao consigo executar o envelope.getResponse().

Vou postar o codigo para ficar mais facil:

package br.login;

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.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.Context;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class LoginActivity extends Activity {

EditText etLogin;
EditText etPass;
Button btLogar;
Context context = this;
String logado = "";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    //EditText - Login
    etLogin = (EditText) findViewById(R.id.etLogin);
    
    //EditText - Password
    etPass = (EditText) findViewById(R.id.etPass);
    
    //Button
    btLogar = (Button) findViewById(R.id.btLogin);
    
    btLogar.setOnClickListener(new View.OnClickListener(){
    	public void onClick(View arg0) {
    		
    		logado = ResultLogin(etLogin.getText().toString(), etPass.getText().toString());
    		
    		Builder dialogo = new AlertDialog.Builder(context);
        	dialogo.setTitle("Aviso");
        	dialogo.setMessage("Resultado: "+logado);
        	dialogo.setNeutralButton("OK", null);
        	dialogo.show();
    	}
    });
}

public String ResultLogin(String user, String pass){
	
    String NAMESPACE = "http://www.swingow.com/";
	String URL = "http://www.swingow.com/user_vld.asmx";
	String METHOD_NAME_LOGIN = "vld";
	String SOAP_ACTION_LOGIN = "http://www.swingow.com/vld";
	
	//Criando os parâmetros de entrada
	SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME_LOGIN);
	
	/*PropertyInfo propInfoUser = new PropertyInfo();
	propInfoUser.name="cEmail";
	propInfoUser.type=PropertyInfo.STRING_CLASS;
	
	PropertyInfo propInfoPsw = new PropertyInfo();
	propInfoPsw.name="cPass";
	propInfoPsw.type=PropertyInfo.STRING_CLASS;
	
	request.addProperty(propInfoUser, user);
	request.addProperty(propInfoPsw, pass);*/
	request.addProperty("cEmail", user);
	request.addProperty("cPass", pass);
	
	//Envelope SOAP
	SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
	envelope.dotNet=true;
	envelope.bodyOut = request;
	envelope.setOutputSoapObject(request);
	
	HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
	androidHttpTransport.setXmlVersionTag("<?xml version=\"1.0\" encoding= \"UTF-8\"?>");
	
	try {
		//Chamada ao WS
		//androidHttpTransport.debug = true;
		androidHttpTransport.call(SOAP_ACTION_LOGIN, envelope);
		
		//String com o retorno
		//SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
		Object resultsRequestSOAP = (Object)envelope.getResponse();
		return resultsRequestSOAP.toString();
	} catch (Exception e) {
		//showDialog
		return e.getMessage() + " FALHOU";
	}
}

}

Muito Obrigado pela Ajuda!

Mais um detalhe, estou utilizando o .jar: ksoap2-andorid-full-212.jar.

Abs

VoCê deu permissão de internet no seu manifest.xml?

fallow

SIM! veja meu AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".LoginActivity"
        android:label="@string/app_name"
        android:screenOrientation="landscape">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

Usa o LogCat para printar no console a stackTrace.

Vamo tentar debugar tb.

No emulador tá dando o mesmo erro?

Seu emulador consegue navegar na web?

fallow

Opa!

Meu Emulador navega na WEB tranquilamente.

No LogCat eu não tenho erros ao executar o programa, há alguns warns. Vou analisar tudo do LogCat com calma pra ver se acho alguma coisa.

Debugando, o valor da stackTrace = NULL, e.getMessage() = NULL.

Alguma luz?

Falow

Testei as chamada aqui no browser, verifica na documentação de isso esta oK:

SOAP_ACTION_LOGIN = http://…/vld nao parece ser uma url válida, no browser nao retorna nada e no firebug retorna erro

e adiciona um catch capturando um trowable para ver se tem exception filha de trowable no http…

essa url me retornou o vld:

http://www.swingow.com/user_vld.asmx?op=Vld

veja esses pontos ok

O SOAP_ACTION_LOGIN, NAMESPACE, URL E METODO eu preenchi de acordo com o que está na minha WSDL.

<wsdl:operation name=“Vld”> - METODO

targetNamespace=“http://www.swingow.com/”> - NAMESPACE

<soap:operation soapAction=“http://www.swingow.com/Vld” - SOAP_ACTION_LOGIN

http://www.swingow.com/user_vld.asmx - URL(gerado no .net)

Com relação a trowable, desculpe a ignorancia mas nao entendi perfeitamente. Tem um exemplo do try/cat capturando um trowable…

Valew!