Вызвать тост от слушателя
Вопрос
Я использую внешний пакет, определяющий соединитель. Идея состоит в том, что соединитель может отправлять сообщения JSON на удаленный сервер с помощью метода SendMessage и получать сообщения через слушателя, вызывая OnMessageCeedived. В моей реализации устройство получает каждое сообщение, которое оно отправляет, призывая, таким образом, OnMessageCeedived. Тем не менее, в моем коде я включил в свой класс активности объект ChatClient, который должен вызвать метод Show_message. Show_message запускает тост. Когда я звоню Show_message из Onjoin, нет никаких проблем, но когда это называется из OnMessageSive, ничего не появляется, тогда как мой отладчик говорит мне, что приложение действительно получает сообщение, и что вспомогательное, запускаемое. В то же время, вызов 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();
}
}
Решение
Я не уверен, как работает JunctionActor, но возможно ли, что обратный вызов OnMessageReceived вызывает из потока, который не является потоком пользовательского интерфейса? Если это так, вам, возможно, придется использовать обработчик, как объяснено в эта почта.
Другие советы
Причина, по которой он не поджарится, заключается в том, что контекст объект helloworldjunctionActivity. Это не существует. Попробуйте также отправить объект контекста
void show_message (строковое сообщение, контекст con) {toast .maketext (con, сообщение, toast.length_short) .show (); }}
show_message ("connected", getApplicationContext ());