Фильтрация JSONArray в зависимости от второго JSONArray - PullRequest
0 голосов
/ 16 апреля 2020

Я получаю два JSONArrays от веб-службы.

Первый JSONArray содержит 32 элемента.

Второй JSONArray содержит 7 элементов.

Мне нужно отфильтровать сначала JSONArray сравнивает некоторые значения из него с некоторыми значениями из второго JSONArray, а затем я хочу заполнить представление recycler с отфильтрованными элементами из первого JSONArray.

Фильтр должен выдавать только 5 из 32 элементов.

Текущий результат дает мне обзор переработчика с 32 предметами, 27 из них пусты, а остальные 5 показывают необходимые отфильтрованные элементы.

Способ, которым я пытаюсь получить отфильтрованные элементы использует два цикла.

Первый l oop включает в себя все элементы из первого JSONArray, и в каждом l oop я включил второй l oop со всеми элементами из второго JSONArray. Затем я создал два предложения if с условиями, которые должны фильтровать нужные элементы. Затем я добавляю отфильтрованные элементы в список, который должен заполнить представление реселлера.

Я уверен, что это не очень чистый метод фильтрации JSONArray в зависимости от значений второго JSONArray, но, очевидно, этот метод фильтрует первый JSONArray по мере необходимости. Проблема заключается в том, что я не могу заполнить представление переработчика полученными элементами.

Это то, что у меня есть сейчас:

public void JSON_PARSE_DATA_AFTER_WEBCALL_SEARCH(JSONArray array){

        for(int i = 0; i<array.length(); i++) {

            UsuariosBuscarAmigos GetDataAdapter2 = new UsuariosBuscarAmigos();

            JSONObject json = null;
            try {
                json = array.getJSONObject(i);


                //array de amigos


                                try {

                                    String amigosArray = prefs.getString("amigosArray","");



                                    JSONArray jsonArray=new JSONArray(amigosArray);

                                    for (int j = 0; j < jsonArray.length(); j++) {


                                        JSONObject amigos = jsonArray.getJSONObject(j);



                                        String amigo_1 = amigos.getString("amigo_1");
                                        String amigo_2 = amigos.getString("amigo_2");
                                        String usuario_id = json.getString(GET_JSON_FROM_SERVER_01);


                                            if (mi_id.equals(amigo_1) && usuario_id.equals(amigo_2)  ){



                                                GetDataAdapter2.setid(json.getString(GET_JSON_FROM_SERVER_01));
                                                GetDataAdapter2.setusername(json.getString(GET_JSON_FROM_SERVER_02));
                                                GetDataAdapter2.setprofile_image(json.getString(GET_JSON_FROM_SERVER_03));
                                                GetDataAdapter2.setuser_type(json.getString(GET_JSON_FROM_SERVER_04));
                                                GetDataAdapter2.setcity(json.getString(GET_JSON_FROM_SERVER_05));
                                                GetDataAdapter2.setdeportes(json.getString(GET_JSON_FROM_SERVER_06));
                                                GetDataAdapter2.setcountry(json.getString(GET_JSON_FROM_SERVER_07));
                                                GetDataAdapter2.setabout(json.getString(GET_JSON_FROM_SERVER_08));
                                            }



                                            if (mi_id.equals(amigo_2) && usuario_id.equals(amigo_1)){


                                                GetDataAdapter2.setid(json.getString(GET_JSON_FROM_SERVER_01));
                                                GetDataAdapter2.setusername(json.getString(GET_JSON_FROM_SERVER_02));
                                                GetDataAdapter2.setprofile_image(json.getString(GET_JSON_FROM_SERVER_03));
                                                GetDataAdapter2.setuser_type(json.getString(GET_JSON_FROM_SERVER_04));
                                                GetDataAdapter2.setcity(json.getString(GET_JSON_FROM_SERVER_05));
                                                GetDataAdapter2.setdeportes(json.getString(GET_JSON_FROM_SERVER_06));
                                                GetDataAdapter2.setcountry(json.getString(GET_JSON_FROM_SERVER_07));
                                                GetDataAdapter2.setabout(json.getString(GET_JSON_FROM_SERVER_08));
                                            }

                                        }

                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }




            } catch (JSONException e) {

                e.printStackTrace();
            }

            subjectsList.add(GetDataAdapter2);

            recyclerViewadapter = new RecyclerViewAmigosMiosBusquedaCardViewAdapter(subjectsList, getActivity());


        }


        recyclerViewPosts.setAdapter(recyclerViewadapter);


    }

РЕДАКТИРОВАТЬ

Снимок экрана, показывающий часть элементов, включая один из 5 отфильтрованных элементов.

enter image description here

Журнал от субъектовList:

for(int i = 0; i<subjectsList.size(); i++) {
            Log.d("subjectsList","subjectsList item#:"+i+">"+subjectsList.get(i).id+" "+subjectsList.get(i).username);
        }

D/subjectsList: subjectsList item#:0>null null
D/subjectsList: subjectsList item#:1>null null
D/subjectsList: subjectsList item#:2>null null
D/subjectsList: subjectsList item#:3>72 anasimo
D/subjectsList: subjectsList item#:4>null null
D/subjectsList: subjectsList item#:5>null null
D/subjectsList: subjectsList item#:6>null null
D/subjectsList: subjectsList item#:7>null null
D/subjectsList: subjectsList item#:8>null null
D/subjectsList: subjectsList item#:9>null null
D/subjectsList: subjectsList item#:10>null null
D/subjectsList: subjectsList item#:11>null null
D/subjectsList: subjectsList item#:12>null null
D/subjectsList: subjectsList item#:13>null null
D/subjectsList: subjectsList item#:14>null null
D/subjectsList: subjectsList item#:15>null null
D/subjectsList: subjectsList item#:16>null null
D/subjectsList: subjectsList item#:17>null null
D/subjectsList: subjectsList item#:18>70 mov-map-TR
D/subjectsList: subjectsList item#:19>null null
D/subjectsList: subjectsList item#:20>null null
D/subjectsList: subjectsList item#:21>null null 
D/subjectsList: subjectsList item#:22>null null
D/subjectsList: subjectsList item#:23>99 movmapgmail
D/subjectsList: subjectsList item#:24>null null
D/subjectsList: subjectsList item#:25>null null
D/subjectsList: subjectsList item#:26>null null
D/subjectsList: subjectsList item#:27>null null
D/subjectsList: subjectsList item#:28>null null
D/subjectsList: subjectsList item#:29>71 qweqweewq
D/subjectsList: subjectsList item#:30>null null
D/subjectsList: subjectsList item#:31>null null

1 Ответ

1 голос
/ 16 апреля 2020

оставьте это:

Хорошо, поскольку все данные в списке, с фильтрацией JSON проблем нет.

Я предполагаю, что проблема в Вы создаете новый адаптер в for l oop, который сбрасывает данные в адаптере.

Итак, переместите эту строку:

        recyclerViewadapter = new RecyclerViewAmigosMiosBusquedaCardViewAdapter(subjectsList, getActivity());

и поместите ее прямо над этим:

 recyclerViewPosts.setAdapter(recyclerViewadapter);

Таким образом, вы не воссоздаете адаптер для каждого обновления l oop.

:

Проблема в том, что вы создаете новый объект не в том месте, вот почему вы всегда получаете 32 объекта, поэтому удалите это:

UsuariosBuscarAmigos GetDataAdapter2 = new UsuariosBuscarAmigos();

отсюда:

 for(int i = 0; i<array.length(); i++) {

    UsuariosBuscarAmigos GetDataAdapter2 = new UsuariosBuscarAmigos();

  .....

и поместите здесь в своем первом операторе if:

  if (mi_id.equals(amigo_1) && usuario_id.equals(amigo_2)  ){

    //create object here  
    UsuariosBuscarAmigos GetDataAdapter2 = new UsuariosBuscarAmigos();

     GetDataAdapter2.setid(json.getString(GET_JSON_FROM_SERVER_01));      

     ............

    //add it to list

    subjectsList.add(GetDataAdapter2);

}

и в другом операторе if сделайте то же самое:

if (mi_id.equals(amigo_2) && usuario_id.equals(amigo_1)){

//create object here
UsuariosBuscarAmigos GetDataAdapter2 = new UsuariosBuscarAmigos();

GetDataAdapter2.setid(json.getString(GET_JSON_FROM_SERVER_01));
....
...

//add it here

subjectsList.add(GetDataAdapter2);

}

наконец удалите это:

subjectsList.add(GetDataAdapter2);

отсюда:

......
} catch (JSONException e) {

e.printStackTrace();
 }

//remove this
subjectsList.add(GetDataAdapter2);
.......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...