14

Android-API の動作から HttpParams を取得できません。

Postrequest でいくつかの単純なパラメーターを送信したくないだけです。パラメータを除いて、すべてが正常に機能しています。パラメーターを postrequest に設定するコード:

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

サーバーが常に応答するため、このコードはパラメーターをまったく追加していないようです。私の要求には「名前」パラメーターがありません。

実際に期待どおりに機能しているものの例:

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

しかし、読みやすく理解しやすい最初の例のバージョンを使用したいと思います。

どんなヒントでも大歓迎です!

4

2 に答える 2

2

同じ問題が発生し、あなたと同じ方法で解決したことがあります...なぜそれが機能しないのかについてのトピックを見つけたのを覚えています。それは、サーバー側での Apache のライブラリの実装に関するものでした。

残念ながら、今はそのトピックを見つけることができませんが、もし私があなただったら、そのままにしておき、コードの「エレガンス」についてあまり心配しないでしょう。おそらくあなたができることはあまりないからです。できますが、まったく実用的ではありません。

于 2010-12-13T09:32:35.083 に答える
1

最初の方法で動作させようとしましたが、HttpParamsインターフェイスはそのために構築されることを意図していないようです。しばらくグーグルで調べたところ、それを説明するこのSOの回答が見つかりました:

HttpParams インターフェイスは、クエリ文字列パラメーターを指定するためのものではなく、HttpClient オブジェクトの実行時の動作を指定するためのものです。

ただし、ドキュメントはそれほど具体的ではありません。

HttpParams インターフェイスは、コンポーネントの実行時の動作を定義する不変値のコレクションを表します。

接続とリクエストのタイムアウトを設定するために、完全に機能し、API 8 から利用可能なクラスを使用する と の両方HttpParamsを組み合わせて使用​​しました。List<NameValuePair>AndroidHttpClient

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

以下も参照してください。

于 2014-08-14T11:50:49.120 に答える