Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组内容在通过HttpPost从Android传输到PHP的过程中丢失_Php_Android_Arrays_Post - Fatal编程技术网

数组内容在通过HttpPost从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);

我正在尝试将一个数组从Android发送到PHP。该数组是一个基本的键值对(字符串、字符串),由我的设备电话簿中的所有联系人(姓名、电话号码)组成。下面是执行此操作的代码段:

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";}
}
?>