【问题标题】:Sorting JSON data by name issue in Android在Android中按名称问题对JSON数据进行排序
【发布时间】:2018-10-09 10:27:39
【问题描述】:

我正在尝试按名称订购我的 JSON 数据,我在这里找到了一些答案,但对我的情况没有任何帮助。我已尝试更新我的代码,如下所示。我在那里标记了我从原始代码中删除的内容,以及我添加的内容:

@Override
    protected Boolean doInBackground(String... args) {
        HttpHandler sh = new HttpHandler();
        String url = "androidnews.json";
        String jsonStr = sh.makeServiceCall(url);

        if (jsonStr != null) {
            try {
                //removed this:
                //JSONObject jsonObj = new JSONObject(jsonStr);
                //JSONArray actors = jsonObj.getJSONArray("result");

                //ADDED:
                ArrayList<JSONObject> array = new ArrayList<JSONObject>();
                JSONArray actors = new JSONArray("result");

                for (int i = 0; i < actors.length(); i++) {
                    JSONObject c = actors.getJSONObject(i);

                    //ADDED:
                    array.add(actors.getJSONObject(i));

                    Actors actor = new Actors();

                    actor.setName(c.getString("name"));
                    actor.setThumb(c.getString("thumb"));

                    actorsList.add(actor);
               }

               //ADDED:
               Collections.sort(array, new Comparator<JSONObject>() {

                        @Override
                        public int compare(JSONObject lhs, JSONObject rhs) {
                            // TODO Auto-generated method stub

                            try {
                                return (lhs.getString("name").toLowerCase().compareTo(rhs.getString("name").toLowerCase()));
                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                                return 0;
                            }
                        }
                    });



           }  catch (final JSONException e) {

                Zoznam.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(Zoznam.this.getApplicationContext(),
                                "Data error " + e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
                }); }

            return true;

        } else {

            Zoznam.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(Zoznam.this.getApplicationContext(),
                            "Chyba internetového pripojenia.",
                            Toast.LENGTH_LONG).show();
                }
            });
            return false;
        }
    }

但我测试后出现这个错误:java.lang.String类型的值结果无法转换为JSONArray

我的 JSON 以:{"result": [{"name": "Joe","thumb": "image.jpg",...

开头

【问题讨论】:

    标签: android arrays json sorting


    【解决方案1】:

    不要对 JSONArray 进行排序,而是尝试使用自定义对象对 Arraylist 进行排序并使用它。你可以做这样的事情

    Collections.sort(actorsList, new Comparator<Actors>() {
        @Override
        public int compare(Actors lhs, Actors rhs) {
            return lhs.getName().compareTo(rhs.getName());
        }
    });
    

    【讨论】:

      【解决方案2】:

      解决您当前问题的方法:

      我猜你正在使用 org.json 库。 目前您正在尝试从字符串“result”创建一个 JSONArray。

      这是您在 JSON 文件中访问数组的方式:

      JSONObject obj = new JSONObject(Files.readAllLines(Paths.get("/path/to/your/file.json")));
      JSONArray arr = obj.getJSONArray("number");
      

      来源:more helpful examples like the one above


      更多信息:

      由于您似乎不熟悉 org.json 方法,我强烈建议您看看 gson,因为它提供了一种将 JSON 条目映射到对象(甚至是对象的数组)的简单方法。

      请参阅:thisthis

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        相关资源
        最近更新 更多