【发布时间】:2017-09-05 05:48:01
【问题描述】:
您好,我已经为实时聊天和订阅推送器频道实现了推送器,但是我有很多活动和片段,我想在其中收听推送器事件。我已经在每个活动/片段中添加了这段代码,但问题是它为每个 id 创建了多个订阅。我知道我必须为此使用 Singleton 任何人都可以指出我正确的方向来实现这一目标吗?
这是我在每个活动/片段中编写的代码
private PusherOptions options;
private Channel channel;
private Pusher pusher;
options = new PusherOptions();
options.setCluster("ap2");
pusher = new Pusher("afbfc1f591fd7b70190f", options);
pusher.connect();
profile_id = Global.shared().preferences.getString("PROFILE_ID", " ");
channel = pusher.subscribe(profile_id);
channel.bind("message",
new SubscriptionEventListener() {
@Override
public void onEvent(String s, String s1, final String data) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
JSONObject result = new JSONObject(data);
String message = result.getString("message");
String time = result.getString("time");
String reId = result.getString("recieverId");
new_message = message;
getConvoData(k, message);
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("DATA ====>>" + data);
}
});
}
});
【问题讨论】:
-
您是否尝试过将 Pusher 实例化代码放入您的 Application 类中?这是实现每个应用程序仅一个实例的最简单方法,您可以从每个 Fragment/Activity 访问该实例。更好的方法是使用 Dagger 之类的东西进行依赖注入:google.github.io/dagger
-
我能够正确实现这一点,非常感谢,现在你能建议我如何在我的活动/片段中反映这些变化,以便我可以更新我的适配器以监听这些推送事件,例如,我想在 ChatActivity 中收听“消息”事件并更新聊天计数器和聊天列表,如何通过将一些数据从全局类发送到特定活动来实现这一点,再次感谢。