2015-07-09 2 views
1

Я довольно занят новым приложением. Тем не менее, я создал сервис, который вызывает метод так:Использование сервиса для отображения тостов

MessageProcessor mp = new MessageProcessing(MessageService.this); 
wa.setNewMessageBind(mp); 

Однако, поскольку он добавляется в службу вместо активности эта ошибка появляется:

nl.giovanniterlingen.whatsapp.MessageService cannot be cast to android.app.Activity 

И да, я искал много на в Интернете, но все же я не мог найти ответ, который соответствует моей потребности. Вот источник MessageProcessing:

((Activity) context).runOnUiThread(new Runnable() { 
       public void run() { 
        Toast.makeText(
          context, 
          msg.getFrom() + "(" + msg.getGroupId() + "): " 
            + msg.getText(), Toast.LENGTH_SHORT) 
          .show(); 
       } 
      }); 

Когда я заменить тост с system.out, как это:

System.out.println(msg.getFrom() + "(" + msg.getGroupId() 
        + "): " + msg.getText()); 

Затем он работает отлично, но я хочу выпить так вот почему я спрашиваю.

Для более четкого представления увидеть мою Github и последние коммиты от 09-07-2015

https://github.com/gi097/WhatsApi-Android

+0

Дайте мне весь класс или только имя класса – Sheychan

+0

Держит на '' Тост ... и удалить все остальное. – LightYearsBehind

+0

@Sheychan см. MessageService.java и MessageProcessing.java –

ответ

0

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

Handler handler = new Handler(Looper.getMainLooper()); 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         Toast.makeText(context, "Your msg here" + msg.getText(), Toast.LENGTH_LONG); 
        } 
       }); 
+0

Еще лучше! Спасибо большое :) –

+0

фактически то же самое я написал. :) –

-1

private Toast myToast; // Declare в поле

myToast = Toast.makeText(this, "DummyMessage", Toast.LENGTH_LONG); // В OnCreate (Bundle б)

myToast.setText("yourActualMessage"); // set msg Inside service or whatever 

myToast.show();     // Display in service or anywhere you want 
1

Вы не можете отдать свой MessageService , который распространяется Обслуживание, до Деятельность.

Вам необходимо получить доступ к вашему UiThread из службы. Проверьте этот вопрос, может быть, это поможет вам: Accessing UI thread handler from a service

Handler handler = new Handler(Looper.getMainLooper()); 

handler.post(something_to_run_on_main_thread); 
+0

Спасибо! Работал :) –

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