You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改现有PHP及JS的情况下从Android Java应用向PHP传数组

问题解决:Android向PHP传递数组无需修改原有代码

现有PHP服务端代码已支持接收数组类型参数,此前一直由JavaScript通过AJAX调用传递数组。现在需要从Android Java应用向该PHP接口传递数组,但要求不修改现有PHP及JavaScript代码。

之前尝试将JSON数组转为字符串传递,但PHP无法识别为数组。最终参考jQuery AJAX的参数编码规则,将数组编码为key%5B%5D=value1&key%5B%5D=value2格式(%5B%5D是[]的URL编码),通过修改Android端的buildParameterString方法,使用android.util.Pair存储参数,实现了数组的正确传递,无需改动原有服务端和前端代码。


原有PHP处理代码

foreach($_POST as $key => $value) {
  if (is_array($_POST[$key])){
     for ($index = 0; $index < count($_POST[$key]); $index++){
          if(ini_get('magic_quotes_gpc'))
            $_POST[$key][$index] = stripslashes($_POST[$key][$index]);

          $_POST[$key][$index] = htmlspecialchars(strip_tags($_POST[$key][$index]));
     }
  }
  else {
      if(ini_get('magic_quotes_gpc'))
        $_POST[$key] = stripslashes($_POST[$key]);

      $_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
  }
}

原有JavaScript AJAX代码片段

$.ajax({
    type: "POST",
    url: 'php/getLibraryPatterns.php',
    dataType: 'json',
    data: data,
})

修改后的Android Java参数构建方法

private String buildParameterString() throws UnsupportedEncodingException
{
    if (m_parameterMap == null || m_parameterMap.size() == 0) return "";
    StringBuilder result = new StringBuilder();


    for (int iPair = 0; iPair < m_parameterMap.size(); iPair++)
    {
        Pair<String, Object> param = m_parameterMap.get(iPair);
        if (iPair > 0) result.append("&");

        Object value = param.second;
        if (value instanceof ArrayList){
            for (int i = 0; i < ((ArrayList)value).size(); i++){
                Object nextValue = ((ArrayList)value).get(i);
                String nextValueStr = "";
                if (nextValue instanceof String){
                    nextValueStr = (String)nextValue;
                }
                else {
                    nextValueStr = Integer.toString((Integer)nextValue);
                }
                if (i > 0) result.append("&");
                result.append(URLEncoder.encode(param.first, "UTF-8"));
                result.append("%5B%5D=");
                result.append(URLEncoder.encode(nextValueStr, "UTF-8"));
            }
        }
        else {
            result.append(URLEncoder.encode(param.first, "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode((String)value, "UTF-8"));
        }
    }
    return result.toString();
}

内容的提问来源于stack exchange,提问作者aff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:05:15