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; } } 
  • Volley Post método para json objeto
  • Volley JsonObjectRequest Post parámetros ya no funcionan
  • Cargar archivos y otros datos de Android a través de la solicitud HTTP POST
  • POSTando JSON / XML usando android-async-http (loopj)
  • Los primeros intentos de HTTP POST y GET son siempre lentos - ¿Está relacionado con el SO o con la red?
  • Respuesta HTML desde el servidor
  • AsyncHttpRequest POST no activar devoluciones de llamada (android-async-http por loopj)
  • Cargar archivos de MS Word de Android a .Net WCF?
  • Android: Obtener respuesta de una URL https
  • Envío de archivos mediante POST con HttpURLConnection
  • Transferencia de JSON al servidor en la solicitud de correo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.