2010-12-12 10 views
14

Non riesco a ottenere l'HttpParams-roba da Android-API funzionante.Impossibile ottenere HttpParams con Postrequest

Non voglio inviare alcuni semplici parametri con il mio post-richiesta. Tutto funziona bene, ad eccezione dei parametri. Il codice per impostare i parametri per la postrequest:

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

Sembra che questo codice non è l'aggiunta di un qualsiasi parametro a tutti, come il server di rispondere sempre, che la mia richiesta non è presente il -parameter "nome".

Un esempio di ciò che sta realmente lavorando come previsto:

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); 

Ma vorrei usare una versione del primo esempio, come è più facile da leggere e capire.

Qualsiasi suggerimento è davvero apprezzato!

+1

+1 - Lo stesso problema qui ... passato all'utilizzo di ArrayList e tutto funziona ora ... non capisco perché la stessa logica con HttpParams non funzioni! – Vladimir

risposta

2

Una volta ho avuto lo stesso problema e l'ho risolto nello stesso modo in cui lo hai ... Ricordo di aver trovato un argomento sul perché non funzionava. Era qualcosa sull'implementazione della libreria di Apache sul lato server.

Purtroppo non riesco a trovare questo argomento ora, ma se fossi in te lascerei semplicemente che funzioni e non mi preoccuperei tanto dell'eleganza del codice, perché probabilmente non c'è molto che tu possa fai, e se puoi, non è affatto pratico.

+3

Sì, hai ragione, ma non capisco. Perché esiste un'API per HttpParams se ovviamente non funziona affatto? –

1

Ho provato a farlo funzionare nel modo giusto, ma sembra che l'interfaccia HttpParams non sia progettata per questo scopo. Dopo aver Googled per un po ', ho trovato this SO answer spiegarlo:

interfaccia

Le HttpParams non è lì per specificare i parametri di stringa di query, è per specificare il comportamento di esecuzione dell'oggetto HttpClient.

La documentazione non è così specifico, però:

HttpParams interfaccia rappresenta un insieme di valori immutabili che definiscono un comportamento in esecuzione di un componente.

Per l'impostazione di connessione e richiesta di timeout, ho usato un mix di entrambi HttpParams e List<NameValuePair>, che è pienamente funzionale e utilizza la classe AndroidHttpClient, disponibile da 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(); 
    } 
} 

Vedi anche :

Problemi correlati