Вызвать тост от слушателя - PullRequest
2 голосов
/ 30 ноября 2011

Я использую внешний пакет, определяющий JunctionActor. Идея заключается в том, что JunctionActor может отправлять сообщения JSON на удаленный сервер с помощью метода sendMessage и получать сообщения через прослушиватель, вызывающий onMessageReceived. В моей реализации устройство получает каждое сообщение, которое оно отправляет, таким образом вызывая onMessageReceived. Тем не менее, в моем коде я включил объект ChatClient в свой класс активности, который должен вызывать метод show_message. show_message вызывает тост. Когда я вызываю show_message из onJoin, проблем вообще нет, но когда он вызывается из onMessageReceived, ничего не появляется, тогда как мой отладчик говорит мне, что приложение действительно получает сообщение и что onMessageReceived запускается. Между тем, вызов show_message в методе onJoin фактически работает. И я не вижу никакой разницы между ними обоими. У вас есть решение?

Большое спасибо

public class HelloWorldJunctionActivity extends Activity {
     onCreate(...){...} [...]
private class ChatClient extends JunctionActor {
      public ChatClient() {
        super("client");
      }
      public void onActivityJoin() {
          show_message("Connected");
      }
      @Override
      public void onMessageReceived(MessageHeader header, JSONObject msg) { 
          try { 
            show_message(msg.getString("text"));
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            show_message(e.getMessage());
        }
      }
}
void show_message(String message) {
      Toast
        .makeText(HelloWorldJunctionActivity.this, message, Toast.LENGTH_SHORT)
        .show();
  }
}

Ответы [ 2 ]

2 голосов
/ 01 декабря 2011

Я не уверен, как работает JunctionActor, но возможно, что обратный вызов onMessageReceived вызывается из потока, который не является потоком пользовательского интерфейса? В этом случае вам, возможно, придется использовать обработчик, как описано в этом сообщении .

0 голосов
/ 01 декабря 2011

Причина, по которой он не используется, заключается в том, что объект контекста HelloWorldJunctionActivity.this не существует. Попробуйте также отправить объект контекста

void show_message (String message, Context con) { Тост .makeText (con, message, Toast.LENGTH_SHORT) .шоу(); } }

show_message («Подключено», getApplicationContext ());

...