我目前正在尝试从Android应用程序将一些数据发送到一个由我控制的php服务器。
在应用程序中收集了大量表单数据,并将其写入数据库。这一切都正常工作。
在我的主要代码中,首先我创建了一个JSONObject(为了这个示例,我已将其精简):
JSONObject j = new JSONObject();
j.put("engineer", "me");
j.put("date", "today");
j.put("fuel", "full");
j.put("car", "mine");
j.put("distance", "miles");
接下来,我将对象传递进行发送,并接收响应:
String url = "http://www.server.com/thisfile.php";
HttpResponse re = HTTPPoster.doPost(url, j);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
HTTPPoster类:public static HttpResponse doPost(String url, JSONObject c) throws ClientProtocolException, IOException
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost request = new HttpPost(url);
HttpEntity entity;
StringEntity s = new StringEntity(c.toString());
s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
entity = s;
request.setEntity(entity);
HttpResponse response;
response = httpclient.execute(request);
return response;
}
这里的代码可以得到一个响应,但服务器返回的是403 - 禁止访问的响应。
我尝试稍微修改了一下doPost函数(实际上这样更好,因为我有很多数据要发送,基本上是3个相同的表单,但数据不同 - 所以我创建了3个JSONObject,每个表单条目对应一个 - 条目来自DB而不是静态示例)。
首先我稍微调整了一下调用方式:
String url = "http://www.myserver.com/ServiceMatalan.php";
Map<String, String> kvPairs = new HashMap<String, String>();
kvPairs.put("vehicle", j.toString());
// Normally I would pass two more JSONObjects.....
HttpResponse re = HTTPPoster.doPost(url, kvPairs);
String temp = EntityUtils.toString(re.getEntity());
if (temp.compareTo("SUCCESS")==0)
{
Toast.makeText(this, "Sending complete!", Toast.LENGTH_LONG).show();
}
好的,那么doPost函数的更改:
public static HttpResponse doPost(String url, Map<String, String> kvPairs) throws ClientProtocolException, IOException
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
if (kvPairs != null && kvPairs.isEmpty() == false)
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(kvPairs.size());
String k, v;
Iterator<String> itKeys = kvPairs.keySet().iterator();
while (itKeys.hasNext())
{
k = itKeys.next();
v = kvPairs.get(k);
nameValuePairs.add(new BasicNameValuePair(k, v));
}
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
}
HttpResponse response;
response = httpclient.execute(httppost);
return response;
}
好的,所以这会返回一个200的响应
int statusCode = re.getStatusLine().getStatusCode();
然而,服务器接收到的数据无法解析为JSON字符串。我认为它格式不正确(这是我第一次使用JSON):
如果在php文件中对$_POST ['vehicle']执行echo操作,则会得到以下结果:
{\"date\":\"today\",\"engineer\":\"me\"}
能否有人告诉我我的错误在哪里,或者是否有更好的方法来实现我想做的事情?希望上述内容有意义!
$_POST['vehicle'];
变量。非常期待您的回复。 - WebDevDanno