2014-11-25 52 views
4

我編寫了一個簡單的程序,使用Java中的pubnub接收消息。我面臨的問題是我無法檢索收到的消息的timetoken。這個回調是從來沒有所謂的,雖然它的API成功調用timeToken不被調用

@Override 
       public void successCallback(String channel, Object message, String timeToken){ 
        System.out.println("SUBSCRIBE : " + channel + " : " + message.getClass() + " : " + message.toString()); 
        System.out.println(timeToken); 
       }  

沒有timetoken的回調,雖然叫存在。任何人都可以告訴我如何檢索消息的時間。

import java.io.IOException; 

    import com.pubnub.api.*; 

import org.json.*; 

public class Main{ 

    public static void main(String[] args){ 

     Pubnub pubnub = 
     new Pubnub("demo", "demo"); 

     pubnub.setUUID("1"); 

     try{ 
     pubnub.subscribe("test", new Callback(){ 

      @Override 
      public void connectCallback(String channel, Object message){ 
       System.out.println("SUBSCRIBE : CONNECT on channel:" + channel + " : " + message.getClass() + " : " 
        + message.toString()); 
      } 

      @Override 
      public void disconnectCallback(String channel, Object message){ 
       System.out.println("SUBSCRIBE : DISCONNECT on channel:" + channel + " : " + message.getClass() + " : " 
        + message.toString()); 
      } 

      public void reconnectCallback(String channel, Object message){ 
       System.out.println("SUBSCRIBE : RECONNECT on channel:" + channel + " : " + message.getClass() + " : " 
        + message.toString()); 
      } 

      @Override 
      public void successCallback(String channel, Object message){ 
       System.out.println("SUBSCRIBE : " + channel + " : " + message); 
      } 


      @Override 
      public void successCallback(String channel, Object message, String timeToken){ 
       System.out.println("SUBSCRIBE : " + channel + " : " + message.getClass() + " : " + message.toString()); 
       System.out.println(timeToken); 
      } 

      @Override 
      public void errorCallback(String channel, PubnubError error){ 
       System.out.println("SUBSCRIBE : ERROR on channel " + channel + " : " + error.toString()); 
      } 

     }); 

     pubnub.history("akosha1", 100, new Callback(){ 

      public void successCallback(String channel, Object response){ 
       System.out.println(response.toString()); 
      } 

      public void errorCallback(String channel, PubnubError error){ 
       System.out.println(error.toString()); 
      } 

     }); 

     try{ 
      System.in.read(); 
     } catch (IOException e){ 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     } catch (PubnubException e){ 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 

} 
+0

訂閱上的TimeToken作爲一個標識符是不可靠的,因爲它是一個移動目標,並且將根據客戶端連接而改變。你在代碼中使用TimeToken是什麼?根據您的使用情況,有一些最佳實踐選項可用;-) – PubNub 2014-11-25 21:35:07

+0

請通過[email protected]與我們聯繫,以便我們更好地瞭解您要完成的任務,並且可以指導您成功(通過修復客戶端,現有功能或解決方法)。 – Geremy 2014-11-26 17:29:26

+0

如果我記得,這個成功回撥用於與所有訂閱呼叫一起被調用。我升級到3.7.0,它不再有效。 – 2014-11-26 22:51:53

回答

2

您可以通過建立Java SDK的罐子自己和改變文件PubnubCore.java和改變行號2617到這一點很容易得到timetoken:

if (!isWorkerDead(hreq)) 
       callback.successWrapperCallback(channel, PubnubUtil.parseJSON(message), timeToken); 

,並再次建立pubnub罐子。

,然後你可以調用

@Override 
    public void successCallback(String channel, Object message, String timetoken) { 
     System.out.println("PUBNUB:"+channel + " : " 
     + message.getClass() + " : " + timetoken+" : "+message.toString()); 
    } 

我可以分享更新的罐子,如果你想跳過這個過程。

+0

更新的jar會很有幫助! – 2014-11-28 17:30:48