Comment appeler un web service à partir d'une application mobile Android
De ces derniers jours, je travaille sur un Android code pour appeler un web service. Je suis à l'aide de ksoap bibliothèques pour Android pour appeler mon service web SOAP créé en .NET. Cependant, je pense qu'il y a quelque chose qui cloche dans mon code que la réponse que je reçois lorsque j'appelle le service web à partir de mon application atteint un bloc catch . J'ai essayé de déboguer mon code Android, mais je n'arrive toujours pas à résoudre mon problème.
Svp quelqu'un peut me dire quel est le problème ou tout autre moyen plus simple de faire cela ?
Voici mon code Android j'ai mis en œuvre jusqu'à présent :
package com.demo;
import java.net.SocketException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class Login extends Activity {
private static final String SOAP_ACTION = "http://tempuri.org/GetLoginDetails";
private static final String METHOD_NAME = "GetLoginDetails";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://10.0.2.2/testlogin/Service1.asmx";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button signin = (Button) findViewById(R.id.regsubmitbtn);
signin.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
EditText etxt_user = (EditText) findViewById(R.id.usereditlog);
user_id = etxt_user.getText().toString();
EditText etxt_password = (EditText) findViewById(R.id.pwdeditlog);
password = etxt_password.getText().toString();
new LoginTask().execute();
}
});
}
String user_id;
String password;
String auth=null;
private class LoginTask extends AsyncTask<Void, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(
Login.this);
protected void onPreExecute() {
this.dialog.setMessage("Logging in...");
this.dialog.show();
}
protected Void doInBackground(final Void... unused) {
auth = doLogin("lalit", "lalit");
return null; //don't interact with the ui!
}
protected void onPostExecute(Void result) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
private String doLogin(String user_id, String password) {
SoapPrimitive resultstring = null;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("user", user_id);
request.addProperty("password", password);
SoapSerializationEnvelope soapenvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
soapenvelope.dotNet = true;
soapenvelope.setOutputSoapObject(request);
AndroidHttpTransport httptransport = new AndroidHttpTransport(URL);
httptransport.debug = true;
try {
httptransport.call(SOAP_ACTION, soapenvelope);
resultstring = (SoapPrimitive) soapenvelope.getResponse();
//Log.d("Authenticaion", resultstring+"");
System.out.println(resultstring);
}
catch (SocketException ex) {
Log.e("Error : " , "Error on soapPrimitiveData() " + ex.getMessage());
ex.printStackTrace();
} catch (Exception e) {
Log.e("Error : " , "Error on soapPrimitiveData() " + e.getMessage());
e.printStackTrace();
}
return resultstring+"";
}
}
}
mon code de service web :
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using System.Data.SqlClient;
namespace LoginDetails
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
//[System.Web.Script.Services.ScriptService]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public String GetLoginDetails(string UserName, string Password)
{
try
{
using (SqlConnection myConnection = new SqlConnection(@"Data Source= .\SQLEXPRESS;Initial Catalog=student;User ID=sa;Password=demo"))
{
myConnection.Open();
using (SqlCommand myCommand = new SqlCommand())
{
myCommand.Connection = myConnection;
myCommand.CommandText = "SELECT COUNT(*) FROM Login WHERE UserName = @UserName AND Password = @Password";
myCommand.Parameters.Add("@UserName", SqlDbType.VarChar).Value = UserName;
myCommand.Parameters.Add("@Password", SqlDbType.VarChar).Value = Password;
return (int)myCommand.ExecuteScalar() == 1 ? "success" : "bad username or password";
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return "an error occurred.";
}
}
}
}
mon logcat :
10-22 21:49:17.635: DEBUG/dalvikvm(117): GC_EXTERNAL_ALLOC freed 901 objects /
10-22 21:49:18.015: WARN/KeyCharacterMap(117): No keyboard for id 0
10-22 21:49:18.015: WARN/KeyCharacterMap(117): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
10-22 21:49:22.275: INFO/ARMAssembler(58): generated s scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x23df98:0x23e054] in 675711 ns
10-22 21:49:42.025: INFO/System.out(274): an error occurred.
10-22 21:49:42.045: WARN/InputManagerService(58): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44eda178
OriginalL'auteur Parth Doshi | 2011-10-22
Vous devez vous connecter pour publier un commentaire.
De travail avec kSOAP2 peut être difficile... je sais. Mais c'est une bonne bibliothèque et j'ai été en mesure de l'obtenir pour fonctionner. J'ai écrit un peu sur le travail avec les kSOAP2 sur Android. Je discuter de passage simple et complexe de paramètres, de la réception des tableaux, et de travailler avec JDBC WebRowSet des objets sur le fil.
http://roderickbarnes.com/blog/droid-chronicles-web-services-handling-complex-parameters
Il y a d'autres articles du blog sur le travail avec les kSOAP2 sur le site. J'espère que cette aide.
OriginalL'auteur Roderick