java - using SOAP web services with android 4.2 -


i developing application connects web services using soap, not make connection correctly activity:

import java.io.ioexception; import android.os.strictmode;  import android.os.asynctask; import android.os.bundle; import android.util.log; import android.view.view; import android.widget.edittext; import android.widget.textview; import android.widget.toast; import android.app.activity; import android.app.progressdialog; import android.content.intent; import android.content.pm.activityinfo; import android.database.cursor; import android.database.sqlite.sqlitedatabase;  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.xmlpull.v1.xmlpullparserexception; import com.google.gson.gson;   public class autenticacion extends activity {  //constantes para la invocacion del web service     private static final string namespace = "http://tempuri.org/";     private static string url="http://192.168.1.66:50513/sicam/service1.asmx";     private static final string method_name = "mostrarprofesor";     private static final string soap_action ="http://tempuri.org/mostrarprofesor";      //declaracion de variables para consuymir el web service     private soapobject request=null;     private soapserializationenvelope envelope=null;     private soapprimitive  resultsrequestsoap=null;     private progressdialog dialog;     textview result;       //declaracion de variables para serealziar y deserealizar     //objetos y cadenas json     gson gson ;     private string  strjson;  //instancias objetos tipo edittext private edittext user, pass;    @override protected void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setrequestedorientation(activityinfo.screen_orientation_portrait);     setcontentview(r.layout.autenticacion);     if (android.os.build.version.sdk_int > 9) {          strictmode.threadpolicy policy = new strictmode.threadpolicy.builder().permitall().build();         strictmode.setthreadpolicy(policy);         }      result = (textview)findviewbyid(r.id.label_user);      // asigna los objetos     this.user = (edittext) findviewbyid(r.id.user);     this.pass = (edittext) findviewbyid(r.id.pass); }   public void autentificar(view view) {      //se crea una instancia de la clase admindatabase      admindatabase datahelper = new admindatabase(this);      //con la instancia creada se llama al metodo open para abrir la base de datos       sqlitedatabase db= datahelper.open();       //se crean dos variables tipo string para guardar los datos de la consulta       string adapter=null;       string adapter1=null;      try{             //se ejecuta una consulta sqlite para recueprar el nombre de usuario y contraseña           cursor fila = db.rawquery("select usuario, contraseña profesor usuario='"+user.gettext()+"' or contraseña='"+pass.gettext()+"'", null);            startmanagingcursor(fila);         //se verifica que existe al menos un registro           if (fila.movetofirst()) {                             //si existen registros se obtienen las columnas con datos y se asignan las variables                 adapter =fila.getstring(0);                 adapter1 =fila.getstring(1);                  //comprueba si el nombre de usuario y/o contraseña son validos                  if(this.user.gettext().tostring().trim().equals(adapter)  && this.pass.gettext().tostring().trim().equals(adapter1)) {                      toast.maketext(getapplicationcontext(),                                                 "te has autentificado correctamente...", toast.length_long).show();                       //se inicia la actividad para pasar la siguiente pantalla si el ingreso fue correcto                      intent i=new intent(this,menu.class);                      i.putextra("usuario",adapter);                      i.putextra("contraseña", adapter1);                      startactivity(i);                      this.finish();                  }                  else{                       toast.maketext(getapplicationcontext(),                                                 "¡el nombre de usuario y/o contraseña son incorrectos!", toast.length_long).show();                   }                 //si no existe un registro en la base se manda                   //el siguiente mensaje para que el usuario pase administracion darse de alta                              }else{                     toast.maketext(getapplicationcontext(),"puede ser que no este registrado en la base de datos consulte al administrador", toast.length_long).show();           }         }catch(exception e){              log.i("basedatos", "error al recuperar datos" + e);         }      db.close();      new mitarea().execute();   }   //método para cancelar o salir de la aplicación public void salida(view view){      this.finish(); }  private class mitarea extends asynctask<string, float, string>{      progressdialog dialog = new progressdialog(autenticacion.this);     protected void onpreexecute() {         super.onpreexecute();                    dialog.setmessage("loading profesor details. please wait...");         dialog.setindeterminate(false);         dialog.setcancelable(true);         dialog.show();      }       protected string doinbackground(string...params) {           //se crea un objeto soapobject para poder realizar la peticion         //para consumir el ws soap. el constructor recibe         //el namespace. por lo regular el namespace es el dominio         //donde se encuentra el web service         request = new soapobject(namespace, method_name);             //se crea un objeto soapserializationenvelope para serealizar la         //peticion soap y permitir viajar el mensaje por la nube         //el constructor recibe la version de soap         envelope = new soapserializationenvelope(soapenvelope.ver11);         envelope.dotnet = true; //se asigna true para el caso de que el ws sea de dotnet         //se envuelve la peticion soap         envelope.setoutputsoapobject(request);          envelope.dotnet = true; //se asigna true para el caso de que el ws sea de dotnet          //objeto que representa el modelo de transporte         //recibe la url del ws         httptransportse transporte = new httptransportse(url);           try {             //hace la llamada al ws             transporte.call(soap_action, envelope);              //se crea un objeto soapprimitive y se obtiene la respuesta             //de la peticion             resultsrequestsoap = (soapprimitive)envelope.getresponse();             string res = resultsrequestsoap.tostring();             if(res.equals("1"))                 //toast.maketext(getapplicationcontext(), "se pudo completar la descarga", toast.length_long);                 log.i("1", "se descargarón los datos");         } catch (ioexception e) {              //toast.maketext(getapplicationcontext(), "no se pudo completar la descarga" +e, toast.length_long);             log.i("2", "no se descargarón los datos");             e.printstacktrace();         } catch (xmlpullparserexception e) {              //toast.maketext(getapplicationcontext(), "no se pudo completar la descarga" +e, toast.length_long);             log.i("3", "no se descargarón los datos");             e.printstacktrace();         }          //almacenamos el resultado en un string ya que lo que represa         //el ws es una cadena json, representando una lista androidos         //de objetos del tipo         strjson = resultsrequestsoap.tostring();         result.settext(strjson);           //se crea el objeto que ayuda deserealizar la cadena json           gson = new gson();            //obtenemos el tipo de un arraylist           /*type lstt = new typetoken; arraylist;(){}.gettype();            //creamos una objeto arraylist           arraylist arrlistaos = new arraylist();            //deserealizamos la cadena json para que se convertida un arraylist           arrlistaos = gson.fromjson(strjson);            //asignaos la arraylist al controls listview para mostrar           //la lista de android que se consumieron del web service           lsvandroidos.setadapter(new arrayadapter           (getapplication(), android.r.layout.simple_list_item_1, arrlistaos));*/           //toast.maketext(getapplicationcontext(),                                  //  "datos bajados correctamente:" + strjson, toast.length_long).show();          log.i("4", "se descargarón los datos");         log.d("se descargarón los datos", strjson);            return null;      }       protected void onprogressupdate (float... valores) {        }       protected void onpostexecute(string bytes) {          super.onpostexecute(bytes);          if (this.dialog.isshowing()) {              this.dialog.dismiss();                                           }                    }   }  } 

log:

04-05 16:24:58.538: e/windowmanager(1133): activity com.android.sicam.autenticacion has leaked window com.android.internal.policy.impl.phonewindow$decorview{40d35f38 v.e..... r.....id 0,0-480,144} added here 04-05 16:24:58.538: e/windowmanager(1133): android.view.windowleaked: activity com.android.sicam.autenticacion has leaked window com.android.internal.policy.impl.phonewindow$decorview{40d35f38 v.e..... r.....id 0,0-480,144} added here 04-05 16:24:58.538: e/windowmanager(1133):  @ android.view.viewrootimpl.<init>(viewrootimpl.java:354) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.view.windowmanagerglobal.addview(windowmanagerglobal.java:216) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.view.windowmanagerimpl.addview(windowmanagerimpl.java:69) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.app.dialog.show(dialog.java:281) 04-05 16:24:58.538: e/windowmanager(1133):  @ com.android.sicam.autenticacion$mitarea.onpreexecute(autenticacion.java:138) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.os.asynctask.executeonexecutor(asynctask.java:586) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.os.asynctask.execute(asynctask.java:534) 04-05 16:24:58.538: e/windowmanager(1133):  @ com.android.sicam.autenticacion.autentificar(autenticacion.java:119) 04-05 16:24:58.538: e/windowmanager(1133):  @ java.lang.reflect.method.invokenative(native method) 04-05 16:24:58.538: e/windowmanager(1133):  @ java.lang.reflect.method.invoke(method.java:511) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.view.view$1.onclick(view.java:3594) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.view.view.performclick(view.java:4204) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.view.view$performclick.run(view.java:17355) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.os.handler.handlecallback(handler.java:725) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.os.handler.dispatchmessage(handler.java:92) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.os.looper.loop(looper.java:137) 04-05 16:24:58.538: e/windowmanager(1133):  @ android.app.activitythread.main(activitythread.java:5041) 04-05 16:24:58.538: e/windowmanager(1133):  @ java.lang.reflect.method.invokenative(native method) 04-05 16:24:58.538: e/windowmanager(1133):  @ java.lang.reflect.method.invoke(method.java:511) 04-05 16:24:58.538: e/windowmanager(1133):  @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:793) 04-05 16:24:58.538: e/windowmanager(1133):  @ com.android.internal.os.zygoteinit.main(zygoteinit.java:560) 04-05 16:24:58.538: e/windowmanager(1133):  @ dalvik.system.nativestart.main(native method) 04-05 16:24:58.997: w/system.err(1133): java.io.ioexception: http request failed, http status: 400 04-05 16:24:59.009: w/system.err(1133):     @ org.ksoap2.transport.httptransportse.call(httptransportse.java:195) 04-05 16:24:59.017: w/system.err(1133):     @ org.ksoap2.transport.httptransportse.call(httptransportse.java:116) 04-05 16:24:59.017: w/system.err(1133):     @ org.ksoap2.transport.httptransportse.call(httptransportse.java:111) 04-05 16:24:59.017: w/system.err(1133):     @ com.android.sicam.autenticacion$mitarea.doinbackground(autenticacion.java:170) 04-05 16:24:59.028: w/system.err(1133):     @ com.android.sicam.autenticacion$mitarea.doinbackground(autenticacion.java:1) 04-05 16:24:59.028: w/system.err(1133):     @ android.os.asynctask$2.call(asynctask.java:287) 04-05 16:24:59.038: w/system.err(1133):     @ java.util.concurrent.futuretask.run(futuretask.java:234) 04-05 16:24:59.038: w/system.err(1133):     @ android.os.asynctask$serialexecutor$1.run(asynctask.java:230) 04-05 16:24:59.047: w/system.err(1133):     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1080) 04-05 16:24:59.047: w/system.err(1133):     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:573) 04-05 16:24:59.057: w/system.err(1133):     @ java.lang.thread.run(thread.java:856) 04-05 16:24:59.057: w/dalvikvm(1133): threadid=12: thread exiting uncaught exception (group=0x40a71930) 04-05 16:24:59.157: e/androidruntime(1133): fatal exception: asynctask #2 04-05 16:24:59.157: e/androidruntime(1133): java.lang.runtimeexception: error occured while executing doinbackground() 04-05 16:24:59.157: e/androidruntime(1133):     @ android.os.asynctask$3.done(asynctask.java:299) 04-05 16:24:59.157: e/androidruntime(1133):     @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:352) 04-05 16:24:59.157: e/androidruntime(1133):     @ java.util.concurrent.futuretask.setexception(futuretask.java:219) 04-05 16:24:59.157: e/androidruntime(1133):     @ java.util.concurrent.futuretask.run(futuretask.java:239) 04-05 16:24:59.157: e/androidruntime(1133):     @ android.os.asynctask$serialexecutor$1.run(asynctask.java:230) 04-05 16:24:59.157: e/androidruntime(1133):     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1080) 04-05 16:24:59.157: e/androidruntime(1133):     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:573) 04-05 16:24:59.157: e/androidruntime(1133):     @ java.lang.thread.run(thread.java:856) 04-05 16:24:59.157: e/androidruntime(1133): caused by: java.lang.nullpointerexception 04-05 16:24:59.157: e/androidruntime(1133):     @ com.android.sicam.autenticacion$mitarea.doinbackground(autenticacion.java:194) 04-05 16:24:59.157: e/androidruntime(1133):     @ com.android.sicam.autenticacion$mitarea.doinbackground(autenticacion.java:1) 04-05 16:24:59.157: e/androidruntime(1133):     @ android.os.asynctask$2.call(asynctask.java:287) 04-05 16:24:59.157: e/androidruntime(1133):     @ java.util.concurrent.futuretask.run(futuretask.java:234) 04-05 16:24:59.157: e/androidruntime(1133):     ... 4 more 

i declared in manifest internet permission

thanks in advance

the reason seems java.net.sockettimeoutexception

in log:

w/system.err(1057): java.net.sockettimeoutexception: failed connect /10.0.2.2 (port 4000) after 20000ms line told us.

instead of code:

httptransportse transporte = new httptransportse(url); 

try code:

httptransportse transporte = new httptransportse(url, 60000); 

httptransportse.java have multiple constructor.

/** * creates instance of httptransportse set url * * @param url * destination post soap data * @param timeout * timeout connection , read timeouts (milliseconds) */     public httptransportse(string url, int timeout) {         super(url, timeout);     } 

Comments

Popular posts from this blog

monitor web browser programmatically in Android? -

Shrink a YouTube video to responsive width -

wpf - PdfWriter.GetInstance throws System.NullReferenceException -