Получить значение String из позиции второго счетчика

Вы правы в определенном утверждении документа BSON, это не XML-документ. Поскольку XML загружается в древовидную структуру, состоящую из «узлов», поиск на арбитальном ключе довольно прост.

Документ MonoDB не так прост в обработке, и это «база данных» во многих так что обычно ожидается, что он будет иметь определенную «однородность» местоположений данных, чтобы упростить «индексирование» и поиск.

Тем не менее это можно сделать. Но, конечно, это означает, что на сервере выполняется рекурсивный процесс, и это означает, что обработка JavaScript с помощью $where .

В качестве примера базовой оболочки, но общий function просто строковый аргумент для оператора $where всюду:

db.collection.find(
  function () {
    var findKey = "find-this",
        findVal = "please find me";

    function inspectObj(doc) {
      return Object.keys(doc).some(function(key) {
        if ( typeof(doc[key]) == "object" ) {
          return inspectObj(doc[key]);
        } else {
          return ( key == findKey && doc[key] == findVal );
        }
      });
    }
    return inspectObj(this);
  }
)

Итак, в основном, проверьте ключи, присутствующие в объекте, чтобы увидеть, соответствуют ли они желаемому «имени поля» и содержимому. Если какой-либо из этих ключей является «объектом», то запишите его в функцию и проверьте снова.

JavaScript .some() гарантирует, что найденное совпадение будет найдено из функции поиска, дающей результат true и возвращающий объект, где этот «ключ / значение» присутствовал на некоторой глубине.

Обратите внимание, что $where по существу означает перемещение всей вашей коллекции, если только не существует какой-либо другой действительный фильтр запросов, который может быть применен к «индексу» в коллекции.

Так что используйте с осторожностью или вообще не работайте и просто работайте с реструктуризацией данных в более работоспособную форму.

Но это даст вам ваш матч.

3
задан Rohit Singh 16 January 2019 в 11:02
поделиться

2 ответа

Используйте следующий код:

private String country_id = "", city_id = "";
private ArrayList<String> country_array;

и заполните свой массив данными:

  for (int i = 0; i < items.getResponse().size(); i++) {
      String get_country_name = items.getResponse().get(i).getCode();
      country_array.add(get_country_name);
      }

Теперь для вашего первого адаптера счетчика:

   ArrayAdapter<String> country_spinnerArrayAdapter = new adapter_spinner(getActivity(), R.layout.spinner_header, country_array);
                                    country_spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
                                    binding.etCountry.setAdapter(country_spinnerArrayAdapter);
                                    binding.etCountry.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                                        @Override
                                        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                            String selectedItemText = parent.getSelectedItem().toString();
                                            if (position > 0) {
                                                country_id = selectedItemText;
                                                city_id = "";
                                                Load_City(position - 1); // -1 to remove postion of the static country text
                                            }
                                        }

                                        @Override
                                        public void onNothingSelected(AdapterView<?> parent) {
                                        }
                                    });
[117 ] Теперь ваш метод City (2nd spinner):

   private void Load_City(int postion) {
        ArrayList<String> city_array = new ArrayList<String>();
        city_array.add(getString(R.string.city));



        for (int i = 0; i < items.getResponse().get(postion).getCities().size(); i++) {
            String get_city_name = items.getResponse().get(postion).getCities().get(i).getName();
            city_array.add(get_city_name);

        }

        ArrayAdapter<String> country_spinnerArrayAdapter = new adapter_spinner(getActivity(), R.layout.spinner_header, city_array);
        country_spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
        binding.etCity.setAdapter(country_spinnerArrayAdapter);

        binding.etCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                String selectedItemText = parent.getSelectedItem().toString();
                if (position > 0) {
                    city_id = selectedItemText;
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
    }

Я надеюсь, что это помогло

0
ответ дан Hossam Hassan 16 January 2019 в 11:02
поделиться

Вы ошиблись ссылкой на первый счетчик.

в строке ниже

int countrySpinnerPosition = spinnerCountry.getSelectedItemPosition();

вы выбрали spinnerCountry вместо spinnerFirst. И вы изначально установили spinnerFirst на первое положение, которое составляет A , и когда вы измените его, чтобы выбрать B его значение, не принятое в методе onItemSelected, намерение принимает выбранную страну, вероятно, в положении first (0) счетчика, так что для второго счетчика всегда установлено значение «Три» вместо «Четыре».

0
ответ дан Chetan Joshi 16 January 2019 в 11:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: