【问题标题】:pubnub.subscribe not respondingpubnub.subscribe 没有响应
【发布时间】:2012-07-02 08:55:51
【问题描述】:

我在我的应用程序中使用PubNub SDK for Android。我尝试订阅一个频道,但没有任何反应。

这是我连接到 pubnub 的代码:

public class MyPubnub {
    private static Pubnub pubnub = null;
    private static final String publishKey = "MY PUBLISH KEY";
    private static final String subscribeKey = "MY SUBSCRIBER KEY";
    private static final String secretKey = "MY SECRET KEY";

    private MyPubnub() {
    }

    public static Pubnub getPubnubObject() {
        if (pubnub == null) {
            pubnub = new Pubnub(publishKey, subscribeKey, secretKey, null,
                    false);
        }
        return pubnub;
    }
}


订阅pubnub的代码:
public void onCreate(Bundle b) {
    super.onCreate(b);
    initUI();
    Pubnub pn = MyPubnub.getPubnubObject();
    String channel = getChannelName();
    Reciver reciver = new Reciver();

    pn.subscribe(channel, reciver);
}
class Reciver implements Callback {

    @Override
    public boolean execute(Object message) {
        Log.d("PUBNUB", "message received [" + message.toString() + "]");
        return true;
    }
}


在调试过程中,我注意到一旦我尝试运行此行,应用程序就会冻结:pn.subscribe(channel, reciver);(没有任何反应,没有任何反应)。

有什么想法吗?

【问题讨论】:

    标签: android pubnub


    【解决方案1】:

    PubNub Android SDK

    您正在询问使用 PubNub 订阅功能在 Android 手机设备上接收远程消息的 PubNub Android API。关于您使用的单例模式,这看起来不错! :-)

    PubNub Android SDK 文档: http://www.pubnub.com/docs/java/android/android-sdk.html

    但是,您的订阅呼叫听起来像是被阻止了。您是否使用最新的 PubNub Android API - https://github.com/pubnub/java/tree/master/android - 最新的 API 应该允许您自动调用订阅 API 而不会阻止您的应用程序。但是,如果是这种情况,并且 subscribe() 方法确实阻塞了您的应用程序,您可以通过将此函数调用放在 Java 线程中并在新消息到达时将消息帖子发送到您的父主程序来解决此问题。

    所以最终的解决方案是将 PubNub 方法调用放在一个新线程中,在接收到来自回调的更新时向父级发送更新:

    https://github.com/pubnub/java/tree/master/android

    Thread t = new Thread() {
        public void run() {
            HashMap<String, Object> args = new HashMap<String, Object>(6);
            args.put("channel", _channel);
    
            // callback to get response
            args.put( "callback", new ReceivedMessage() );
    
            // Listen for Messages (Subscribe)
            _pubnub.subscribe(args);
        };
    };
    t.start();
    threads.put(_channel, t);
    

    然后你实现你的 ReceiveMessage() 类:https://github.com/pubnub/java/tree/master/android - 查看源代码。

    请注意,这不是完整的复制/粘贴答案,但它会让您指向正确的方向。此外,这种线程样式将向后兼容未来的升级。

    所以最后,使用 Threads() 是你的答案。

    【讨论】:

    • This Link 不再存在。可以更新一下吗?
    • 感谢您的评论。我已经更新了文档,这里是最新的 GitHub URL:github.com/pubnub/java/tree/master/android
    • 谢谢,你们的支持真的很快。 :)
    • 不客气!我知道你是火影忍者的粉丝,你在他们都长大之前看过原版系列吗?
    • 是的!是的! :D 如你所见,我是小火影忍者,所以我最喜欢那个部分^^
    【解决方案2】:

    不要在 cypherkey 上传递 null,只需传递“”。 我得到一个空异常并且没有触发消息到达事件。

    替换这个: pubnub = new Pubnub(publishKey, subscribeKey, secretKey, null, false);

    通过这个: pubnub = new Pubnub(publishKey, subscribeKey, secretKey, "", false);

    【讨论】:

    • 这与六个月前回答的问题无关......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2013-02-06
    • 2020-06-23
    • 2017-09-25
    • 2013-04-20
    • 2016-10-06
    相关资源
    最近更新 更多