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
Post a Comment