3

私は自分のアプリでPubNubSDKforAndroidを使用しています。チャンネルに登録しようとしましたが、何も起こりません。

これが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);何も起こらず、応答も何もありません)。

何かご意見は?

4

2 に答える 2

2

PubNub Android SDK

あなたは、Android携帯電話デバイスでリモートメッセージを受信するためにPubNubサブスクライブ機能を使用してPubNubAndroidAPIについて質問しています。使用しているシングルトンパターンに関しては、これは問題ないようです。:-)

PubNub Android SDKドキュメント: http ://www.pubnub.com/docs/java/android/android-sdk.html

ただし、サブスクライブ呼び出しでブロックされているようです。最新のPubNubAndroidAPIを使用していますか-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()を使用することがここでの答えです。

于 2012-07-03T03:56:23.357 に答える
1

サイファーキーにnullを渡さずに、「」を渡してください。null例外が発生し、メッセージ到着イベントが発生しませんでした。

これを置き換えます:pubnub = new Pubnub(publishKey、subscribeKey、secretKey、null、false);

これにより:pubnub = new Pubnub(publishKey、subscribeKey、secretKey、 ""、false);

于 2013-01-20T16:55:13.717 に答える