Многоуровневая выборка Firebase и реализация связанного списка - PullRequest
0 голосов
/ 25 апреля 2020

последняя база данных Firebase

, поэтому мне нужно задать 2 вопроса

A . я хочу удалить потомка RT - 002 (скажем, 3:"vasundhara"), и их ключи должны измениться как

  1. silver city multiplex
  2. Вайшали Метро
  3. Станция Низамудин

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

, а также хочет вставить после и перед любым конкретным ребенком (как мы делаем в связанных списках)

пример, который я хочу добавить "rd c" до vaishali metro

  1. серебряный городской мультиплекс
  2. rd c
  3. метро Вайшали
  4. станция Низамудин

пример, который я хочу добавить "rd c" после метро Вайшали

  1. серебряный городской мультиплекс
  2. метро Вайшали
  3. 1 c
  4. станция Низамудин

B. Я хочу выбрать маршруты, где одно из значений равно «Серебряный городской мультиплекс» и второе значение "низ amudin station "

Выход будет: RT - 002 RT - 007

Код ниже B , который я пробовал когда моя база данных была похожа на nizamudin station: = "true" и была такой для каждого маршрута

, и мне пришлось дважды нажать кнопку, чтобы загрузить данные.

старое изображение базы данных

Я пытался удалить ребенка ( часть A упомянута), но безуспешно, и результатом был ребенок "RT - 002 "Ведро удалено вместо одного ребенка

public void Search_Routes(View view){

    String startstop=spinstart.getSelectedItem().toString();//this data comes from spinner
    String endstop=spinend.getSelectedItem().toString();//this data comes from spinner
    RouteListAdapter.clear();//in oncreate i have already set the adapter for spinners and listviews(the output is displayed in listview)
    myref=FirebaseDatabase.getInstance().getReference("routes");
    RouteList.clear();
    if (startstop.equals(endstop))
    {
        Toast.makeText(this, "Please Select Different Stops !!!", Toast.LENGTH_SHORT).show();
    }
    else if (startstop.equals(placeholderSource)||endstop.equals(placeholderDest))
    {
        Toast.makeText(this, "Please Select a Stop !!!", Toast.LENGTH_SHORT).show();
    }
    else
    {
        switch (counter){
            case 0:
                Toast.makeText(RouteViewActivity.this, "Click SEARCH ROUTES button again", Toast.LENGTH_SHORT).show();
                counter=1;
                break;
            case 1:counter=0; break;
        }

        ArrayList<String> stoparr=new ArrayList<>();
        stoparr.add(startstop);
        stoparr.add(endstop);
        Collections.sort(stoparr);
        myref.orderByChild(stoparr.get(0)).equalTo("true").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot item:dataSnapshot.getChildren()) {q1.add(item.getKey());}
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        myref.orderByChild(stoparr.get(1)).equalTo("true").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot item:dataSnapshot.getChildren()) {q2.add(item.getKey());}
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });

        if(q1.size()>q2.size()){ssize=q2.size();}
        if(q1.size()<q2.size()){ssize=q1.size();}
        if(q1.size()==q2.size()){ssize=q2.size();}
        for (int i=0;i<ssize;i++)
        {
            if (q2.contains(q1.get(i))){RouteList.add(q1.get(i));}
        }
        RouteListAdapter.notifyDataSetChanged();
        q1.clear();
        q2.clear();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...