我无法从Android-API工作中获得Httpparams-stuff。

我只是不愿意用我的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);

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

任何提示都非常感谢!

有帮助吗?

解决方案

一旦遇到了同样的问题,我就以与您相同的方式解决了它……我记得我发现了一些关于为什么不起作用的话题。这是关于服务器端的Apache库实现的问题。

不幸的是,我现在找不到这个话题,但是如果我是你,我会让它起作用,并且不必担心代码的“优雅”,因为您可能会做很多事情,如果您可以做很多您可以,这根本不实用。

其他提示

试图以第一种方式使它起作用,但似乎 HttpParams 界面不打算为此构建。谷歌搜索了一段时间,我发现 这个答案 解释它:

HTTPPARAMS接口没有用于指定查询字符串参数,它用于指定HTTPCLIENT对象的运行时行为。

但是,该文档并不是那么具体:

HTTPPARAMS接口表示不变值的集合,该值定义了组件的运行时行为。

为了设置连接和请求超时,我都使用了两者的混合 HttpParamsList<NameValuePair>, ,它具有功能完全功能,并使用 AndroidHttpClient 班级,可从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();
    }
}

也可以看看:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top