有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

coldfusion在使用PubNub的herenow(java对象)时遇到问题

我已经包括了Pubnub-4.0.0。将jar文件放入我的webroot。 (Pubnub-4.0.0.jar可在此处下载:https://www.pubnub.com/docs/java/pubnub-java-sdk-v4

我正试图将“现在就在这里”的java代码引入我的coldfusion项目,但在这样做时遇到了一些麻烦

java代码如下所示:

PNConfiguration pnConfiguration = new PNConfiguration();
pnConfiguration.setSubscribeKey("SubscribeKey")   
PubNub pubnub = new PubNub(pnConfiguration);
pubNub.hereNow()
    .channels(Arrays.asList("ch1", "ch2", "ch3")) // who is present on those channels?
    .includeState(true) // include state with request (false by default)
    .includeUUIDs(true) // if false, only shows occupancy count
    .async(new PNCallback<PNHereNowResult>() {
        @Override
        public void onResponse(PNHereNowResult result, PNStatus status) {

        }
});

我对应的Coldfusion代码如下:

<cfobject type="java" class="com.pubnub.api.PNConfiguration" name="objPNConfiguration" >
<cfset PNConfiguration = objPNConfiguration.init() >
<cfset PNConfiguration.setSubscribeKey("SubscribeKey") >
<cfobject type="java" class="com.pubnub.api.PubNub" name="objPubNub" >
<cfset pubnub = objPubNub.init(PNConfiguration) >
<cfset tmp = pubnub.hereNow({channels: "5A4B3B59-FA6A-F22A-404F18EFA8112508"}) >
<cfdump var="#tmp#" >

我没有收到任何返回的错误。 我觉得我调用“hereNow”方法的方式不正确,或者我试图显示结果的方式不正确

在这方面有人能提供帮助吗? 谢谢


共 (2) 个答案

  1. # 1 楼答案

    看起来channels是一个方法名,而不是一个结构。这同样适用于includeStateincludeUUIDs。将它们作为链式方法调用,并传入预期参数

    • channels()需要一个CF数组(即java.util.List对象)
    • includeStateincludeUUIDs需要一个简单的布尔值

    前三(3)种方法应采用类似的方法:

    <cfscript>
    config = createObject("java", "com.pubnub.api.PNConfiguration").init();
    config.setSubscribeKey( "SubscribeKey" );
    pubNub = createObject("java", "com.pubnub.api.PubNub").init( config );
    
    pubNub.hereNow()
        .channels( ["ch1", "ch2", "ch3"] )
       .includeState( true )
       .includeUUIDs( true )
       .asynch(
          ....
        ) ;
    </cfscript>
    

    .async()方法有点不同,因为它需要某种类型的回调对象。不幸的是,看起来所有的callback classes都是^{}。(我不知道为什么。没有一个回调类包含实现,所以它们的功能更像一个^{}。)遗憾的是,CF中的abstract类没有等价物

    抽象类不能实例化,也不能与CF10+中的coolDynamic Proxy Feature一起使用。动态代理是一个灵活的特性,它允许您用CFC替换自定义java类。但是,它只支持^{}。由于PNCallback不是一个接口,因此实际上无法避免编写一个扩展PNCallback的自定义java类

    package your.package.name;
    
    import com.pubnub.api.models.consumer.PNStatus;
    import com.pubnub.api.models.consumer.presence.PNHereNowResult ;
    
     public class YourCallbackClass extends PNCallback<PNHereNowResult> {
        public void onResponse(PNHereNowResult result, PNStatus status) {
            // do something with the result and status here
        }
    }
    

    编译后,将其添加到CF类路径。然后可以在CF中创建自定义类的实例,并将其传递到asynch()方法:

    </cfscript>
    // .....
    yourCallback = createObject("java", "your.package.name.YourCallbackClass").init();
    pubNub.hereNow()
        .channels( ["ch1", "ch2", "ch3"] )
       .includeState( true )
       .includeUUIDs( true )
       .asynch( yourCallback );
    </cfscript>