Enviar formulario con datos POST en la aplicación para Android

He estado buscando en la web una forma de hacer esto durante una semana, y no puedo entenderlo.

Estoy tratando de implementar una aplicación que mi universidad puede utilizar para permitir a los usuarios iniciar sesión en varios servicios en el campus con facilidad. La forma en que funciona actualmente es que vayan a un portal en línea, seleccione qué servicio quieren, rellene su nombre de usuario y pwd, y haga clic en iniciar sesión. Los datos del formulario se envían por correo (incluye varios valores ocultos, así como sólo el nombre de usuario y pwd) al script de inicio de sesión correspondiente, que luego los firma y carga el servicio.

He estado intentando resolver el problema de dos maneras. Primero probé un WebView, pero no parece querer apoyar todo el html que normalmente hace que este formulario funcione. Tengo todos los elementos que necesito, los campos de usuario y pwd, así como un botón de inicio de sesión, pero al hacer clic en el botón no hace nada. Me preguntaba si necesitaba agregar un controlador onclick para ello, pero no puedo ver cómo el botón se implementa en el html de la webview no utilizar un elemento android independiente.

La otra posibilidad era usar los widgets xml para crear el formulario en un diseño relativo agradable, que parece cargar más rápido y se ve mejor en la pantalla de Android. Utilicé los campos de EditText para la entrada, un widget del hilandero para la selección del servicio, y el widget del botón para el inicio de sesión. Sé cómo hacer que el onclick y los manejadores de selección de elementos para el botón y el hilador, respectivamente, pero no puedo averiguar cómo enviar los datos a través de POST en un intento que luego lanzar un navegador. Puedo hacer una intención con la URL de acción, pero no puedo obtener los datos POST para alimentar en él.

Así que aquí está lo que tengo ahora …

HttpParams params = new BasicHttpParams(); HttpClient client = new DefaultHttpClient(params); HttpPost post = new HttpPost(action); String endResult = null; try { post.setEntity(new UrlEncodedFormEntity(myList)); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { String response = client.execute(post, new BasicResponseHandler()); endResult = response; } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

Así que mi pregunta ahora … es ¿cómo puedo tomar la pantalla endResult, que debería ser la página devuelta después de haber iniciado sesión en mi servicio y mostrarlo en un navegador?

2 Solutions collect form web for “Enviar formulario con datos POST en la aplicación para Android”

¿Qué hay de malo en usar el navegador incorporado? También puede enviar un formulario utilizando UrlEncodedFormEntity y HttpClient.

 HttpParams params = new DefaultHttpParams(); // setup whatever params you what HttpClient client = new DefaultHttpClient(params); HttpPost post = new HttpPost("someurl"); post.setEntity(new UrlEncodedFormEntity()); // with list of key-value pairs client.execute(post, new ResponseHandler(){}); // implement ResponseHandler to handle response correctly. 

Bueno y después de que tenga la respuesta en una cadena. La respuesta ya que su página va a estar en html. Necesita usar un WebView para mostrar el html. WebView tiene un método loadData () que toma una cadena de html y la muestra.

Basado en la respuesta de @RobbyPonds, para beneficio de las personas que pasan por aquí, a continuación se presenta una implementación genérica para publicar y recibir una respuesta de un URI ( NOTA también contiene la implementación en espera para devolver una respuesta, probablemente no todos los días la implementación de la llamada de red)

 private static String responseValue; @SuppressWarnings({ "unchecked", "rawtypes" }) public static String sendPostToTargetAndWaitForResponse() throws ClientProtocolException, IOException { final Thread currentThread = Thread.currentThread(); synchronized (currentThread) { HttpParams params = new BasicHttpParams(); HttpClient client = new DefaultHttpClient(params); HttpPost post = new HttpPost(HTTP_POST_URI); // List Creation with post data for UrlEncodedFormEntity ArrayList<NameValuePair> mList = new ArrayList<NameValuePair>(); mList.add(new NameValuePair() { @Override public String getValue() { return getSampleJSON(); } @Override public String getName() { return "json"; } }); post.setEntity(new UrlEncodedFormEntity(mList)); // with list of key-value pairs client.execute(post, new ResponseHandler(){ @Override public Object handleResponse(HttpResponse response) throws ClientProtocolException, IOException { responseValue = EntityUtils.toString(response.getEntity(), "UTF-8"); synchronized (currentThread) { currentThread.notify(); } return null; } }); try { currentThread.wait(); } catch (InterruptedException e) { e.printStackTrace(); } return responseValue; } } 
  • Utilizar Otto para actualizar un listadapter de un GcmListenerService
  • De todos modos para capturar datos de formulario a través del método POST en Android WebView?
  • No se pueden agregar detalles del producto mientras se crea una nueva cotización
  • Configuración del tipo de contenido Json para el cliente Rest
  • Respuesta HTML desde el servidor
  • HttpURLConnection Post: El flujo de salida no tiene efecto?
  • Android Retrofit | Publicar objeto personalizado (enviar json al servidor)
  • ¿Cómo publico datos usando la biblioteca okhttp con el tipo de contenido x-www-form-urlencoded?
  • Solicitud de publicación de Android en IOS
  • Publicar un servicio JSONArray en WCF desde android
  • Datos de formulario multipart de Android POST
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.