数组内容在通过HttpPost从Android传输到PHP的过程中丢失
我正在尝试将一个数组从Android发送到PHP。该数组是一个基本的键值对(字符串、字符串),由我的设备电话簿中的所有联系人(姓名、电话号码)组成。下面是执行此操作的代码段:数组内容在通过HttpPost从Android传输到PHP的过程中丢失,php,android,arrays,post,Php,Android,Arrays,Post,我正在尝试将一个数组从Android发送到PHP。该数组是一个基本的键值对(字符串、字符串),由我的设备电话簿中的所有联系人(姓名、电话号码)组成。下面是执行此操作的代码段: HttpClient httpClient = new DefaultHttpClient(); // post header HttpPost httpPost = new HttpPost(postReceiverUrl);
HttpClient httpClient = new DefaultHttpClient();
// post header
HttpPost httpPost = new HttpPost(postReceiverUrl);
int i=0;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
for(i=0;i<item.size();i++) {
nameValuePairs.add(new BasicNameValuePair(item.get(i).getName(), item.get(i).getNumber()));
}
Log.v("Count", ""+i);
try {
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// execute HTTP post request
HttpResponse response = httpClient.execute(httpPost);
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
String responseStr = EntityUtils.toString(resEntity).trim();
Log.v("TAG", "Response: " + responseStr);
}
} catch (IOException e) {
e.printStackTrace();
}
HttpClient-HttpClient=newdefaulthttpclient();
//柱头
HttpPost HttpPost=新的HttpPost(postReceiverUrl);
int i=0;
List nameValuePairs=新的ArrayList();
对于(i=0;i
这非常适用于较小的电话簿。然而,当在一个只有100个电话号码条目的电话簿上运行此功能时,回音转储仅显示87个。给出了什么?我甚至尝试使用GET和REQUEST而不是POST,但结果保持不变。看起来问题在于表单内容类型,即
application/x-www-form-urlencoded
默认设置。以下是有关以下内容的详细信息:
内容类型“application/x-www-form-urlencoded”效率低下
用于发送大量二进制数据或包含
非ASCII字符。内容类型“多部分/表单数据”应为
用于提交包含文件、非ASCII数据和
二进制数据
在这里看一下如何使用多部分/表单数据
:
我已经尝试过这样更改默认http头:httpPost.setHeader(“内容类型”、“多部分/表单数据”);之后,服务器根本没有响应!此外,我没有发送任何表单数据。我的程序构造了一些基本KVP的数组,并将其发送到PHP服务器。发送此类数据必须使用什么内容类型?很明显,服务器没有响应。现在您的请求格式不正确,仅更改内容类型标头是不够的要使其作为
multipart/form data
工作,这种类型的请求必须有边界,HttpPost
不要添加它们。因此,请按照w3中的说明添加它们,并使用自定义请求正文,或者查看我链接的答案。如果切换到multipart/form data
,我认为一切都会正常工作。
<?php
// Run script only if the dump array is received
if($_POST){
echo "server received: ".count($_POST);
// Read comma-separated text file
$arr = 0;
foreach($_POST as $names[$arr] => $numbers[$arr]) {
$numbers[$arr] = preg_replace('/[^0-9]/','',$numbers[$arr]);
$arr += 1;
}
for($i=0;$i<$arr;++$i) {
echo $i.". ".$numbers[$i]."-------".$names[$i]."\n";}
}
?>