【问题标题】:Pass Array & Multidimensional Array from Android to PHP将数组和多维数组从 Android 传递到 PHP
【发布时间】:2023-03-27 15:56:01
【问题描述】:

我的 Android Java 代码必须将一些数组和一些多维数组传递给 PHP 服务器。不幸的是,我没有访问 PHP 服务器的权限。

这是 PHP 服务器 API:

$result= array(
    "username" => "admin",
    "password" => "admin",
    "hobbies" => array(
                "1" => "science"
     ),
    "skills" => array(
                "1" => array(
                        "Boxing" => "Yes"
                    )
     )
);

这是我的 Android Java 代码:

final String hobbies[] = {"science"};
final String skills[][] = {{"Boxing"},{"Yes"}};

@Override
protected Map<String, String> getParams() {
                Map<String, String> jParams= new HashMap<String, String>();

JSONArray arrHobbies = new JSONArray();
JSONArray arrSkills = new JSONArray();
arrHobbies.put(hobbies[0]);
arrSkills.put(skills[0][0]);

jParams.put("username", "admin");
jParams.put("password", "admin");
jParams.put("hobbies",arrHobbies.toString();
jParams.put("skills",arrSkills.toString();

return jParams;
}};

然后,我使用此代码查看数据是如何发送的。

Log.d("Response : ", jParams.toString());

它在 Android 日志上显示:

{password=admin, username=admin, hobbies=["science"], skills=[["275]]}

更新 这是我调试代码时的哈希值:

 0 = {java.util.HashMap$HashMapEntry@4884} "hobbies" -> "{"1":"1"}"
 1 = {java.util.HashMap$HashMapEntry@4885} "password" -> "admin"
 2 = {java.util.HashMap$HashMapEntry@4886} "username" -> "admin"
 3 = {java.util.HashMap$HashMapEntry@4887} "skills" -> "{"1":{"Boxing":"Yes"}}"

我从未成功与 PHP Server API 通信。 请帮助我在哪里丢失或错误。

【问题讨论】:

  • 它应该记录什么?因为那正是您正在创建的日志?我怀疑您不了解 skills[][] 实际创建的内容

标签: php android arrays json multidimensional-array


【解决方案1】:

有一个库如何调用 GSON,在互联网上搜索它 这是将String解析为Json和将Json解析为String的最快和最简单的方法。

【讨论】:

  • 您好,先生,感谢您的回答,我将保留此答案作为备份计划,因为我有超过 5 个活动,如果我从使用 JSON 获得解决方案,我会更喜欢
  • 这是最简单的方法,相信我。 GSON 是最强大的解决方案
  • 那我试试看:)
  • 您可以使用 Volley 或 Spring 获取数据,并使用 Gson 计算和滚动数据
  • 是的,我已经使用了 Volley,我认为这都是关于发送到服务器的数据格式
【解决方案2】:

我认为你的问题是 associative array in php 代表 JSON object 在你的 json 字符串中,所以你可能应该将这样的东西发送到你的 PHP Server API: p>

{
    "password": "admin",
    "username": "admin",
    "hobbies":{
        "1": "science"
    },
    "skills": {
        "1": {
            "Boxing": "Yes"
        }
    }
}

这里我不能 100% 确定,这取决于你的服务器实现,但要实现上面的 json 输出,你的 getParam() 应该如下所示:

protected String getParams() {
    JSONObject jParams = new JSONObject();

    try {
        JSONObject arrHobbies = new JSONObject();
        arrHobbies.put("1", "science");


        JSONObject boxing = new JSONObject();
        boxing.put("Boxing", "Yes");

        JSONObject arrSkills = new JSONObject();
        arrSkills.put("1", boxing);


        jParams.put("username", "admin");
        jParams.put("password", "admin");

        jParams.put("hobbies", arrHobbies);
        jParams.put("skills", arrSkills);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return jParams.toString();
}

【讨论】:

  • 您好,谢谢您的回答,请问有什么问题吗? password=admin (Android) 和 "password" 是否一样:"admin" (PHP Server)
  • 不,不一样。 "password" : "admin" 是 key => value 的 json 表示形式,如果您将 password=admin 放入 json 中,它将无效。 pro.jsonlint.com 这是检查 json 有效性的好工具。您的 PHP 服务器可能会尝试使用 this function 来解码您的 json。这也是我如何获得服务器可能会询问的 json:LINK
  • 嗨,你介意看看我上面编辑的帖子吗,我在调试代码时发布了哈希值。格式是否正确?因为我仍然得到错误
  • 如果使用volley,可以尝试发送JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,URL, new JsonObject(hashMap),而不是HashMap。我通常以这种方式完成类似的任务。 1) 安装postman 2) 确保它可以在邮递员中运行,这样您就可以 100% 确定服务器对您的期望。 3) 创建 JSONObject,它将产生与邮递员相同的 json 字符串 4) 使用 Volley 或 Retrofit 发送您的 json。
【解决方案3】:

希望对您有所帮助:

@覆盖 受保护的地图 getParams() {

    Map<String, String> jParams = new HashMap<String, String>();

    JSONArray arrHobbies = new JSONArray();
    JSONArray arrSkills1 = new JSONArray();
    JSONArray arrSkills2 = new JSONArray();

    arrHobbies.put("science");
    arrSkills1.put("Boxing");
    arrSkills1.put("Yes");

    arrSkills2.put(arrSkills1);


    jParams.put("username", "admin");
    jParams.put("password", "admin");
    jParams.put("hobbies", arrHobbies.toString());
    jParams.put("skills", arrSkills2.toString());

    return jParams;
}

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 2013-05-14
    相关资源
    最近更新 更多