Pregunta

No se puede obtener la HttpParams-materia del trabajo Android-API.

Yo sólo wa no para enviar algunos parámetros simples con mi Postrequest. Todo está trabajando muy bien, a excepción de 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 usar una versión del primer ejemplo, ya que es más fácil de leer y entender.

Cualquier indicio es muy apreciado!

¿Fue útil?

Solución

Una vez que tenía el mismo problema, y ??lo resolví la misma manera como lo hizo ... Recuerdo que encontré algún tema de por qué que no estaba funcionando. Era algo acerca de implementación de la biblioteca de Apache en el lado del servidor.

Por desgracia no puedo encontrar ese tema ahora, pero si yo fuera usted me acaba de dejar de trabajar y no me preocupe tanto de la "elegancia" del código, causa, probablemente, no hay mucho que puede hacer y si se puede, no es práctico en absoluto.

Otros consejos

Intentamos conseguir que funcione de la primera forma, pero parece HttpParams interfaz no está pensado para ser construido para eso. Después de haber buscado en Google durante un tiempo, encontré esta respuesta SO explicando que:

El HttpParams interfaz no está allí 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 una colección de valores inmutables que definen un comportamiento de tiempo de ejecución de un componente.

Para el ajuste de conexión y solicitar los tiempos de espera, he utilizado 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();
    }
}

Ver también:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top