android — Лучшие практики для обработки поиска" />

Лучшие практики для обработки поиска

У меня есть настройка SearchView, и у меня есть слабо отделенная архитектура, использующая Retrofit и Otto.

Мне интересно, что такое Best Practices для поиска в Android или в любом другом мобильном приложении (то есть что-то подобное можно применить и к iOS).

В частности, я использую AutoCompleteTextView для обработки предложений в моем SearchView и данные поступают прямо из API. Я не считаю, что это лучшая практика, поскольку каждый раз, когда пользователь изменяет текст в SearchView, инициируется вызов API.

Я думаю о том, чтобы сохранить кэш в SQLite и затем пинговать результаты оттуда, но что, если пользователь хочет получить самые непосредственные данные? Как бы вы справились с этим? Какой шаблон это будет использовать?

Буду признателен за любые мысли о лучшей архитектуре или подходе к поиску в Android.

12 голосов | спросил AndyRoid 7 J000000Tuesday15 2015, 21:38:06

3 ответа


0

Итак, чтобы ответить на этот вопрос в достаточной степени, поскольку я не был удовлетворен другими ответами, здесь есть еще несколько шагов, которые необходимо рассмотреть в этой проблеме.

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

  • Есть ли автозаполнение?
  • Какова область поиска?
  • Будет ли кеширование?

И еще много вопросов.

Я бы, вероятно, сначала создал бы собственный адаптер для обработки запросов в поиске, а затем внедрил бы агрессивное кэширование запросов пользователя. Это важно в том смысле, что запросы пользователя очень важны. Возможно, имеет смысл использовать только кэшированные результаты, поскольку Autocomplete очень дорого реализовывать автозаполнение и пинговать его при каждом изменении текста .

Кеширование можно выполнить с помощью помощников SQLite в Android. Это может быть дорого, но мы имеем дело с простыми объектами запросов (так как это должно быть в случае с API, объекты должны иметь большой объем памяти или байт).

ответил AndyRoid 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 27 Sep 2015 01:19:29 +0300 2015, 01:19:29
0

Я думаю, что нет смысла вызывать API, пока пользователь не перестал печатать. Таким образом, вы можете поставить задержку, скажем, 500 мс. Когда пользователь перестает печатать, через 500 мс вы делаете вызов API и отображаете результаты.

Вы можете использовать Handler postDelayed

public void onTextChanged(CharSequence s, int start, int before, int count) {
    handler.removeCallbacks(searchRunnable);
    handler.postDelayed(searchRunnable, 500);
}
ответил Gennadii Saprykin 7 J000000Tuesday15 2015, 21:47:52
0
  • сначала нужно сделать столбец индексом, который является атрибутом поиска.
  • вы должны хранить только этот столбец в базе данных sqlite. Используется для выбора параметров из вашей таблицы, когда поиск выполняется пользователями.
  • затем вы вызываете api для результата поиска после слова, выбранного в строке поиска.
ответил kalai 20 J000000Monday15 2015, 16:28:36

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132