无法让HttpParams使用Postrequest

时间:2010-12-12 22:21:14

标签: android http android-internet

我无法从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);

但我想使用第一个例子的版本,因为它更容易阅读和理解。

任何提示都非常感谢!

2 个答案:

答案 0 :(得分:2)

一旦我遇到同样的问题,我就像你一样解决它...我记得我发现了一些关于为什么不起作用的话题。这是Apache在服务器端实现的库。

不幸的是,我现在无法找到这个话题,但如果我是你,我会让它继续工作,不会过分担心这种优雅&#34;代码,因为你可能做的事情很多,如果可以的话,它根本就不实用。

答案 1 :(得分:1)

尝试以第一种方式使其工作,但似乎HttpParams接口并非旨在为此构建。谷歌搜索了一段时间后,我发现this SO answer解释了它:

  

HttpParams接口不用于指定查询字符串参数,它用于指定HttpClient对象的运行时行为。

但文档并不具体:

  

HttpParams接口表示一组不可变值,用于定义组件的运行时行为。

为了设置连接和请求超时,我使用了HttpParamsList<NameValuePair>的混合,它们功能齐全并使用了API {8}中提供的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();
    }
}

另见: