2016-05-27 1 views
0

В моей основной деятельности я использую пейджер представления, который показывает два фрагмента. Один для последних сообщений и других онлайн-контактов. В моем контактном фрагменте я отношусь к службе с именем ContactService. ContactService имеет интерфейс FragmentConnected, который имеет публичный метод как это:Вызов метода фрагмента ViewPager из сервиса: только исходный поток, создавший иерархию представления, может коснуться его представлений.

интерфейс FragmentConnected {

 public void onFragmentConnected(ArrayList<Contact> clist); 

}

В моей ContactFragment я реализующий этот интерфейс, как этот

общественной пустоте onFragmentConnected (ArrayList) {

     onlineContactAdapter.changeList(clist); 
      } 

Здесь onlineContactAdapter - мой аддтер для ContactFragment имеет метод changeList для обновления списка онлайн-пользователей.

В моей службе ContactService in onHandleIntent Я получаю список онлайн-пользователей с сервера, и я вызываю метод contactFragment.onFragmentConnected, поскольку у меня есть экземпляр ContactFragment в contactFragment, когда он привязывается к сервису. EveryThing работает нормально, пока я не вызову этот метод onFragmentConnected из службы. Когда я вызываю этот метод из службы, он дает мне эту ошибку: - android.view.ViewRootImpl $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представлений, может коснуться его представлений.

+0

Ваш сервис вызывает ваш обратный вызов из другого потока, кроме основного потока ... кажется. Таким образом, обратный вызов службы активности вызывается в фоновом потоке, вызывающем эту проблему. Я бы рекомендовал вам вызвать ваш обратный вызов службы из основного потока. – Jona

+0

Но мне нужно обновить список контактов из службы, так как я могу вызвать этот метод из службы в качестве интерфейса пользователя MainThread? Есть ли какой-нибудь метод? – abc

+0

Я точно не знаю, как вы реализовали свой ContactService. Но ваши данные тянут с сервера происходит в фоновом потоке. После того, как вы получите эти данные, отправляйте свои обновления через основной поток. Там много способов сделать это. Самый простой способ использования Handler. http://stackoverflow.com/questions/11123621/running-code-in-main-thread-from-another-thread – Jona

ответ

0

Я точно не знаю, как вы реализовали свой ContactService. Но ваши данные тянут с сервера происходит в фоновом потоке. После того, как вы получите эти данные, вам нужно отправить сообщение, чтобы отправлять обновления по основному потоку. Там много способов сделать это.

Самый простой способ использования Handler. Running code in main thread from another thread

Смежные вопросы

 Смежные вопросы