我目前正在开发一个需要发送post请求并从服务器获取json对象的项目。之前我使用Get方法访问json对象。它工作正常。但由于一些服务器的更改,我不得不转向post方法。然后它不会返回我之前从'get'方法获得的json对象。我尽力提出解决方案,但不能。非常感谢任何人都可以帮助我解决这个问题。
private AdSniperAdObjectResponse postData(String url) {
//Bundle b = new Bundle();
HttpClient httpClient = HttpClientFactory.getThreadSafeClient();
//Log.d(TAG, "url: " + url);
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept", "JSON");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
nameValuePairs.add(new BasicNameValuePair("latitude", "-33.8736"));
nameValuePairs.add(new BasicNameValuePair("longitude", "151.207"));
nameValuePairs.add(new BasicNameValuePair("age", "35"));
nameValuePairs.add(new BasicNameValuePair("gender", "All"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity resEntity = httpResponse.getEntity();
if (resEntity != null) {
String resp = EntityUtils.toString(resEntity);
以上是我使用的代码。之前我使用过HttpGet类。对于HttpPost,'resp'变量始终为null。不知道我做错了什么。
答案 0 :(得分:1)
不应该像
HttpResponse httpResponse = httpClient.execute(httpPost);
if (httpResponse != null) {
String resp = httpResponse.toString();
如果服务器返回JSONString ..
say JSONObject data = new JSONObject(resp);
然后获取值..
答案 1 :(得分:0)
DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof (List<NameValuePair> ));
尝试使用此功能并使用此
传递数据jsonSerializer.WriteObject(reqStream, nameValuePairs );
reqStream.Close();
无论你得到什么,再次反序列化响应
答案 2 :(得分:0)
在您尝试获取HttpEntity
之前,您应该获得StatusLine
并检查状态代码是否符合预期。我怀疑真正的问题是服务器正在发送某种错误响应。由于您使用“Accept”标头来请求JSON响应,因此服务器可能没有在响应正文中发送任何诊断信息...因此它是空的。
答案 3 :(得分:0)
伙计们我找到了解决方案。当我评论以下两行时它起作用了。
httpPost.setHeader("Content-Type", "application/json");
httpPost.setHeader("Accept", "JSON");
非常感谢大家的回答。非常感谢。