2017-02-20 20 views
2

兩個返回值的接口:當我在AllJoyn Framework上設計了一個帶有多個返回值的接口時,這個調用拋出了一個異常。我不知道爲什麼

@BusInterface(name = "com.cykj.alljoyn.servicetest.MutipleRVInterface") 
public interface MutipleRVInterface { 
//多返回值 
public class Values { 
    @Position(0) 
    public int startTime; 
    @Position(1) 
    public int endTime; 
    } 
@BusMethod(replySignature = "ii") 
public Values getTime() throws BusException; 
} 

一個類實現的接口和BusObject並在AllJoyn服務:

class ServiceTest implements MutipleRVInterface, BusObject { 

    @Override 
    public Values getTime() throws BusException { 
     Values t = new Values(); 
     t.startTime = 11; 
     t.endTime = 22; 
     return t; 
    } 
} 

客戶端使用服務對象:

try { 
     MutipleRVInterface.Values time = mutipleRVInterface.getTime(); 
     logResult(time.startTime + "-" + time.endTime); 
    } catch (BusException e) { 
     LogResult(e.getMessage()); 
     Log.e(TAG, e.getMessage()); 
     e.printStackTrace(); 
     } 

當我調用MutipleRVInterface的方法時,會引發異常。

02-20 14:00:17.209 20695-20954/com.cykj.alljoyn.clienttest W/System.err: org.alljoyn.bus.ErrorReplyBusException: org.alljoyn.Bus.ErStatus 
02-20 14:00:17.209 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at org.alljoyn.bus.ProxyBusObject.methodCall(Native Method) 
02-20 14:00:17.210 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at org.alljoyn.bus.ProxyBusObject.access$300(ProxyBusObject.java:35) 
02-20 14:00:17.210 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at org.alljoyn.bus.ProxyBusObject$Handler.invoke(ProxyBusObject.java:264) 
02-20 14:00:17.210 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at $Proxy1.getTime(Native Method) 
02-20 14:00:17.210 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at com.cykj.alljoyn.clienttest.BusMethodTActivity$BusHandler.handleMessage(BusMethodTActivity.java:584) 
02-20 14:00:17.210 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:110) 
02-20 14:00:17.211 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at android.os.Looper.loop(Looper.java:193) 
02-20 14:00:17.211 20695-20954/com.cykj.alljoyn.clienttest W/System.err:  at android.os.HandlerThread.run(HandlerThread.java:61) 

我該如何解決問題?代碼中哪裏出錯?

ps:這是一個使用AllJoyn框架的Android項目。而且我英語不是很好,這個問題可能不太清楚。試着去理解。

回答

0

您可以在AllJoyn方法中使用用戶定義的數據類型。

您需要定義自定義數據類型的位置和簽名,並將其與代表STRUCT的簽名'r'一起使用。

所以在你的情況下,代碼應該是這樣的;

@BusInterface(name = "com.cykj.alljoyn.servicetest.MutipleRVInterface") 
public interface MutipleRVInterface { 
//多返回值 
public class Values { 
    @Position(0) 
    @Signature("i") 
    public int startTime; 
    @Position(1) 
    @Signature("i")   
    public int endTime; 
    } 
@BusMethod(replySignature="r") 
public Values getTime() throws BusException; 
} 

| r | STRUCT |用戶定義類型,其字段將與 Position註釋和Signature

您可以找到有關簽名的詳細信息在https://allseenalliance.org/docs/api/java/org/alljoyn/bus/annotation/Signature.html或只是審查org/alljoyn/bus/annotation/Signature.java代碼

+0

這是沒有用的。當我設置replySignature =「r」時,當registerBusObject時返回狀態爲「BAD_ANNOTATION」時出錯。 –

+0

@ Wing.L我編輯了簽名。您還可以檢查./alljoyn_java/test/org/alljoyn/bus/AddressBookInterface.java類以進一步使用。 – Fatih

相關問題