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!

È stato utile?

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:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top