【问题标题】:Problem with convert jsonObject to string jsonarray and show in dialog将 jsonObject 转换为字符串 jsonarray 并在对话框中显示的问题
【发布时间】:2020-10-05 00:48:15
【问题描述】:

我需要帮助以在对话框中显示数组 3 项

数组中的项目:InvernaderoId、Name 和 Invernarder

我在将 jsonobject 转换为 jsonarray 时遇到问题

JsonObject:

{"data":[{"invernaderoId":"1","name":"inver B","Invernarder":"inv1"},{"invernaderoId":"2","name":"inver C","Invernarder":"inv2"},{"invernaderoId":"3","name":"inv13","Invernarder":"inv3"},{"invernaderoId":"4","name":"inv14 A","Invernarder":"HTFRA14A"}]}

JSONArray arr = js.getJSONArray("data");转换成JsonArray

结果示例:

[{"invernaderoId":"1","name":"inver B","Invernarder":"inv1"},{"invernaderoId":"2","name":"sd 12 C","Invernarder":"HTESP12C"},{"invernaderoId":"3","name":"s13","Invernarder":"sd"},{"invernaderoId":"4","name":"ds 14 A","Invernarder":"ds"}]

编码替换数组字符串:

  String[] arr2 = arr.toString().replace("},{", " ,").split(" ");

final String[] employes= arr2;

代码对话框:

 new AlertDialog.Builder(getContext())
                            .setTitle("Selected one")
                            .setSingleChoiceItems(employes, itemSelected, new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface, int selectedIndex) {
                                    String nombreselect = employes[selectedIndex];
                                    employes.setText(nombreselect);
                                }
                            })
                            .setPositiveButton("Ok", null)
                            .setNegativeButton("Cancel", null)
                            .show();
                }
            });

对话框中的查看器选择:

【问题讨论】:

    标签: android arrays dialog


    【解决方案1】:

    您可以遍历 JSONArray 元素并将它们添加到字符串数组中,然后使用此字符串数组提供您的 AlertDialg

    final String jsonResponse = "{   \"data\":[      {\n" +
            "         \"invernaderoId\":\"1\",\n" +
            "         \"name\":\"inver B\",\n" +
            "         \"Invernarder\":\"inv1\"\n" +
            "      \n" +
            "},\n" +
            "      {\n" +
            "         \"invernaderoId\":\"2\",\n" +
            "         \"name\":\"inver C\",\n" +
            "         \"Invernarder\":\"inv2\"\n" +
            "      \n" +
            "},\n" +
            "      {\n" +
            "         \"invernaderoId\":\"3\",\n" +
            "         \"name\":\"inv13\",\n" +
            "         \"Invernarder\":\"inv3\"\n" +
            "      \n" +
            "},\n" +
            "      {\n" +
            "         \"invernaderoId\":\"4\",\n" +
            "         \"name\":\"inv14 A\",\n" +
            "         \"Invernarder\":\"HTFRA14A\"\n" +
            "      \n" +
            "}\n" +
            "   \n" +
            "]\n" +
            "}";
    
    try {
        JSONObject js = new JSONObject(jsonResponse);
        JSONArray arr = js.getJSONArray("data");
        String[] list = new String[arr.length()];
        for (int i = 0; i <= arr.length() - 1; i++) {
            JSONObject element = arr.getJSONObject(i);
            String InvernaderoId = "\"invernaderoId\":\"" + element.getString("invernaderoId") + "\", ";
            String Name = "\"name\":\"" + element.getString("name") + "\", ";
            String Invernarder = "\"Invernarder\":\"" + element.getString("Invernarder") + "\"";
    
            list[i] = InvernaderoId + Name + Invernarder;
        }
    
        AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
        builder.setTitle("Title")
                .setSingleChoiceItems(list, -1, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int position) {
    
                        Toast.makeText(getContext(), "Position: " + position, Toast.LENGTH_SHORT).show();
    
                    }
                }).setPositiveButton("Ok", null)
                .setNegativeButton("Cancel", null)
                .show();
    
    } catch (JSONException e) {
        e.printStackTrace();
    }
    

    这是结果

    【讨论】:

    【解决方案2】:
      String[] arr2 = arr.toString().replace("},{", " ,").split(" ");
    

    因为你有一个数组,最简单的方法是正确传递 json 数组,创建一个适配器(例如ArrayAdapter&lt;DataModel&gt;)并在构建器上调用setAdapter。在适配器子类中,您可以控制单个条目在对话框中的呈现方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      • 2017-04-14
      相关资源
      最近更新 更多