无法让Httpparams与Posttrequest一起工作
-
09-10-2019 - |
题
我无法从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接口表示不变值的集合,该值定义了组件的运行时行为。
为了设置连接和请求超时,我都使用了两者的混合 HttpParams
和 List<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();
}
}
也可以看看:
不隶属于 StackOverflow