gpt4 book ai didi

Android Pusher Singleton channel 订阅

转载 作者:行者123 更新时间:2023-11-30 00:22:18 25 4
gpt4 key购买 nike

您好,我已经实现了用于实时聊天和订阅推送器 channel 的推送器,但是我有很多 Activity 和 fragment ,我想在其中收听推送器事件。我已经在每个 Activity/fragment 中添加了这段代码,但问题是它为每个 id 创建了多个订阅。我知道我必须为此使用 Singleton,谁能指出我实现这一目标的正确方向?

这是我在每个 Activity/fragment 中编写的代码

 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);
}
});
}
});

最佳答案

好吧,在尝试了一段时间之后,我自己弄明白了,我创建了一个全局类,并向其中添加了推送器代码,以便它在应用程序的整个生命周期中只维护一个连接

public class Global extends MultiDexApplication {

@Override
public void onCreate() {
super.onCreate();

SharedPreferences preferences = sharedInstance.getSharedPreferences(sharedInstance.getString(R.string.shared_preferences), Context.MODE_PRIVATE);
sharedInstance.preferences = preferences;
connectTopusher();


}

public void connectTopusher() {
PusherOptions options;
Channel channel;
Pusher pusher;
options = new PusherOptions();
options.setCluster("ap2");
pusher = new Pusher("afbfc1f591fd7b70190f", options);
pusher.connect();
String profile = Global.shared().preferences.getString("PROFILE_ID", "");
channel = pusher.subscribe(profile);

channel.bind("message",
new SubscriptionEventListener() {
@Override
public void onEvent(String s, String s1, final String data) {
new Handler(Looper.getMainLooper()).post(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");

} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("DATA ====>>" + data);
}
});
}
});


channel.bind("status_change", new SubscriptionEventListener() {
@Override
public void onEvent(String s, String s1, final String data) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
try {
JSONObject result = new JSONObject(data);

} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("DATA ====>>" + data);
}
});
}


});


}

关于Android Pusher Singleton channel 订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46047766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com