Несколько экземпляров GoogleApiClient с API ближайших сообщений

Что я делаю:

Я использую Eddystone с API Google Nearby Messages.

Я подключаюсь к Google API в onCreateView(), чтобы инициировать объект и вызываю mGoogleApiClient.connect();, затем в GoogleAPI onConnected() я вызываю Nearby.Messages.subscribe() для прослушивания сообщений.

В результате этого «подключено», «подписано успешно» mGoogleApiClient в настоящее время происходит 3-4 раза в один и тот же момент, как я вижу в журнале.

Я хочу, чтобы экземпляр connect(), subscribe() создавался только один раз и чтобы избежать многократного подключения к Google.

В onFound() я запускаю runOnUiThread(thread), который анализирует вложение json-string, добавляет в arraylist, добавляет arraylist в пользовательский адаптер, устанавливает для адаптера recyclerview.

(Каждое вложение, которое я обрабатываю в onFound() под runOnUiThread():

{"Z":[{"a":"text","b":"text","c":"text","d":"text","e":"text","f":"text"
}]}

)

Вопрос в том,

Итак, действительно ли мне нужно использовать runOnUiThread(), который позволяет мне только установить адаптер recyclerview как LayoutManager как владельца дочернего элемента? Как еще я могу добиться того же?

Как избежать нескольких экземпляров connect(), subscribe()?

Как избежать отображения повторяющихся вложений в моем списке?

Как восстановить recyclerView с помощью пользовательского адаптера при onResume() ?


person Community    schedule 30.11.2015    source источник
comment
создайте базовое действие и выполните все подписки и подключения в этом действии. и используйте их где угодно   -  person Mustanser Iqbal    schedule 30.11.2015


Ответы (1)


Я бы рекомендовал вам позвонить GoogleApiClient#connect() в onStart(), а затем позвонить GoogleApiClient#disconnect() в onStop(). Если вы вызываете Nearby.Messages.subscribe() в onConnect(), вы в конечном итоге подписываетесь каждый раз, когда создается фрагмент (например, при изменении ориентации). По этой причине вам следует позвонить Nearby.Messages.unsubscribe()in onPause().

И да, вам нужно использовать runOnUiThread(), так что вам не придется одновременно изменять ресурсы.

Я не уверен, что вы подразумеваете под «что позволяет мне только установить адаптер recyclerview как LayoutManager как владельца дочернего элемента». Вы можете уточнить? На самом деле, не могли бы вы задать это как отдельный вопрос (это не очень хороший этикет StackOverflow, чтобы объединить несколько вопросов).

person Shailen Tuli    schedule 14.12.2015