2010-12-12 14 views
14

No puedo hacer funcionar el material HttpParams del Android-API.No se puede obtener HttpParams trabajando con Postrequest

Solo quiero enviar algunos Parámetros simples con mi Post-solicitud. Todo funciona bien, excepto por los parámetros. El código para establecer los parámetros para la postrequest:

HttpParams params = new BasicHttpParams(); 
params.setParameter("password", "secret"); 
params.setParameter("name", "testuser"); 
postRequest.setParams(params); 

Parece que este código no es la adición de cualquier parámetro en absoluto, ya que el servidor siempre responde, que mi solicitud falta la -parámetro "nombre".

Un ejemplo de lo que realmente está trabajando como se esperaba:

ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
postParameters.add(new BasicNameValuePair("name", "testuser")); 
postParameters.add(new BasicNameValuePair("password", "secret")); 
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
postRequest.setEntity(formEntity); 

Pero me gustaría utilizar una versión del primer ejemplo, ya que es más fácil de leer y entender.

¡Cualquier pista es realmente apreciada!

+1

+1 - El mismo problema aquí ... cambió a utilizar ArrayList y todo está funcionando ahora ... no entiendo por qué la misma lógica con HttpParams no funciona. – Vladimir

Respuesta

2

Una vez tuve el mismo problema, y ​​lo resolví del mismo modo que lo hizo ... Recuerdo que encontré algún tema sobre por qué no funcionaba. Era algo sobre la implementación de la biblioteca de Apache en el lado del servidor.

Desafortunadamente no puedo encontrar ese tema ahora, pero si fuera usted simplemente lo dejaría funcionando y no me preocuparía demasiado acerca de la "elegancia" del código, porque probablemente no hay mucho que pueda hacer, y si puedes, no es práctico en absoluto.

+3

Sí, tienes razón con eso, pero no lo entiendo. ¿Por qué hay una API para HttpParams si obviamente no funciona en absoluto? –

1

Ha intentado que funcione de la primera manera, pero parece que la interfaz HttpParams no está diseñada para eso. Después de haber buscado en Google durante un tiempo, encontré this SO answer explicarla:

interfaz

Los HttpParams no está ahí para especificar los parámetros de cadena de consulta, es para especificar el comportamiento de tiempo de ejecución del objeto HttpClient.

La documentación no es tan específico, sin embargo:

HttpParams interfaz representa un conjunto de valores inmutables que definen un comportamiento de tiempo de ejecución de un componente.

Para establecer la conexión y los tiempos de espera de solicitud, he usado una mezcla de ambos HttpParams y List<NameValuePair>, que es completamente funcional y utiliza la clase AndroidHttpClient, disponible de API 8:

public HttpResponse securityCheck(String loginUrl, String name, String password) { 
    AndroidHttpClient client = AndroidHttpClient.newInstance(null); 
    HttpPost requestLogin = new HttpPost(
      loginUrl + "?"); 

    //Set my own params using NamaValuePairs 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("j_username", name)); 
    params.add(new BasicNameValuePair("j_password", password)); 

    //Set the timeouts using the wrapped HttpParams 
    HttpParams httpParameters = client.getParams(); 
    int timeoutConnection = 3000; 
    HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection); 
    int timeoutSocket = 5000; 
    HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket); 
    try { 
     requestLogin 
       .setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 
     HttpResponse response = client.execute(requestLogin); 
     return response; 
    } catch (Exception e) { 
     Log.e(TAG, e.getMessage(), e); 
     return null; 
    }finally { 
     client.close(); 
    } 
} 

Véase también :

Cuestiones relacionadas