Non può ottenere HttpParams lavorare con Postrequest
-
09-10-2019 - |
Domanda
Non riesco a ottenere il HttpParams-stuff dalla lavorazione di Android-API.
Ho appena wan't di inviare alcuni semplici parametri con il mio Postrequest. Tutto sta funzionando benissimo, tranne che per i 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 è in realtà funziona 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, in quanto è più facile da leggere e da capire.
Ogni suggerimento è molto apprezzato!
Soluzione
Una volta ho avuto lo stesso problema e ho risolto allo stesso modo come avete fatto ... Mi ricordo che ho trovato qualche argomento sul perché che non funzionava. E 'stato qualcosa in merito all'esecuzione biblioteca di Apache sul lato server.
Purtroppo non riesco a trovare quel soggetto, ma se fossi in te vorrei solo lasciarlo lavorare e non mi preoccuperei tanto di "eleganza" del codice, causa probabilmente non c'è molto che si può fare , e se è possibile, non è pratico a tutti.
Altri suggerimenti
Ho cercato di farlo funzionare il primo modo, ma sembra HttpParams
interfaccia non è destinato ad essere costruita per questo. Dopo aver Googled per un po ', ho trovato questa risposta SO spiegarla:
Il HttpParams interfaccia 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: