json解析数据集搜索条件无效

时间:2017-01-19 08:52:56

标签: android

我成功解析了json数据,我可以在我的recyclerView上显示它。

它是我的数据来源: (解决了这个问题) 我想设置一个关于month > 5

的搜索条件

我之前设置了String.equal("compareString");,它有效。

但是当我在这种情况下设定月份时,它不起作用。

我设置错了吗?任何帮助都将不胜感激。

    private void showRoute(String route) {
            try {
                JSONObject jsonObject = new JSONObject(route);
                String arrayData = jsonObject.getString("JsonData");
                JSONArray jsonArray = new JSONArray(arrayData);
                Log.d(TAG, "JSONArray" + ">>>>>>>>>>" + jsonArray);

                for (int i = 467; i < jsonArray.length(); i++) {
                    int month=5;//set search condition, i want to show a list , it's month > 5
//here is my search condition
                    if (Integer.parseInt(jsonArray.getJSONObject(i).getString("STARTMONTH"))>=month) {
                        String EDUTITLE = jsonArray.getJSONObject(i).getString("EDUTITLE");
                        String STARTMONTH = jsonArray.getJSONObject(i).getString("STARTMONTH");
                        String STARTDAY = jsonArray.getJSONObject(i).getString("STARTDAY");
                        String STARTDATE = jsonArray.getJSONObject(i).getString("STARTDATE");
                        String SPONSER = jsonArray.getJSONObject(i).getString("SPONSER");
                        String EDUSCORE = jsonArray.getJSONObject(i).getString("EDUSCORE");
                        String EDUIN = jsonArray.getJSONObject(i).getString("EDUIN");
                        String HOLDER = jsonArray.getJSONObject(i).getString("HOLDER");
                        ActivityListItem listItem = new ActivityListItem(EDUTITLE, STARTMONTH, STARTDAY, STARTDATE, SPONSER, EDUSCORE, EDUIN, HOLDER);
                        arrayList.add(listItem);
                    }else {
                        recyclerView.setVisibility(View.GONE);
                        textForEmpty.setVisibility(View.VISIBLE);
                    }
                    //arrayListOrigin.add(listItem);
                }
            } catch (JSONException ex) {
                ex.printStackTrace();
            }
        }

另一个问题,如果我的数据是467~500,我的列表将从上到下显示467~500,如果我想让它从上到下显示500~467,我该怎么办才更正确?

我尝试了一些代码:它显示为空

String month="5";
if (month.equals(jsonArray.getJSONObject(i).getString("STARTMONTH"))) {
other code...
}

但如果我尝试像这样比较EDUIN:它有效......

String eduin="0";
                if (eduin.equals(jsonArray.getJSONObject(i).getString("EDUIN"))) {
other code...
}

我现在不明白:(

1 个答案:

答案 0 :(得分:1)

问题是因为这条线可能无法执行条件
String arrayData = jsonObject.getString("JsonData"); 在您的回复中,“JsonData”是JSONArray而不是String。 试试这个。

 JSONObject jsonObject = new JSONObject(route);
 JSONArray jsonArray = jsonObject.getJSONArray("JsonData") ;
  for (int i = 467; i < jsonArray.length(); i++) {
    //rest of your code
    }

现在,如果您想要从500到467的项目反转循环

for(int i = jsonArray.length()-1; i >= 467; i--){
if(Integer.parseInt(jsonArray.getJSONObject(i).getString("STARTMONTH"))>=month){
   // rest of the code..
}}

在循环之外隐藏了这样的循环视图

   if (arrayList.size() == 0) {
    //hide recycleview
       recyclerView.setVisibility(View.GONE);
       textForEmpty.setVisibility(View.VISIBLE);
}

更容易的方式

ArrayList<Element> tempElements = new ArrayList<Element>(arrayList);
Collections.reverse(tempElements);