2016-02-25 2 views
12

की त्रुटि देता है मैंने दो अलग सेंसर के लिए आवेदन विकसित किया है। वे अलग-अलग काम कर रहे हैं लेकिन जब मैं उन्हें टॉगर का उपयोग करने की कोशिश करता हूं और ऑलॉयन की तुलना में दो अलग-अलग बसें बनाता हूं तो यह अपवाद देता है।एंड्रॉइड ऑलजॉयन: दूसरी मशीन के साथ कनेक्शन BusAttachement

org.alljoyn.services.common.BusAlreadyExistException: वस्तु एक BusAttachment साथ पहले से निर्धारित किया गया है।

नीचे कनेक्शन के लिए मेरा स्रोत कोड है। क्या कोई मुझे बता सकता है कि मुझे यह समस्या क्यों है।

private void connect() 
     {   org.alljoyn.bus.alljoyn.DaemonInit.PrepareDaemon(getApplicationContext()); 

      bus = new BusAttachment("ControlPanelBrowser", BusAttachment.RemoteMessage.Receive); 
      bus.registerBusListener(new BusListener()); 


      Status status = bus.registerBusObject(mControlPanelSignalInterface, Constants.SERVICE_PATH); 


      if (status != Status.OK) { 

       Log.d(TAG, "Problem while registering bus object"); 

      } 

      SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
      srpPassword = settings.getString(PREFS_PASSWORD, DEFAULT_SECURED_SRP_PASSWORD); 

      SrpAnonymousKeyListener authListener = new SrpAnonymousKeyListener(this, logger, AUTH_MECHANISMS); 
      Status authStatus = bus.registerAuthListener(authListener.getAuthMechanismsAsString(), 
        authListener, getKeyStoreFileName()); 

      if (authStatus != Status.OK) { 
       Log.e(TAG, "Failed to register AuthListener"); 
      } 

      status = bus.connect(); 


      if (Status.OK == status){ 

       String daemonName = Constants.DAEMON_NAME_PREFIX + ".ControlPanelBrowser.G" + 
         bus.getGlobalGUIDString(); 

       int flag = BusAttachment.ALLJOYN_REQUESTNAME_FLAG_DO_NOT_QUEUE; 

       Status reqStatus = bus.requestName(daemonName, flag); 

       if (reqStatus == Status.OK) { 

        Status adStatus = bus.advertiseName(Constants.DAEMON_QUIET_PREFIX + 
          daemonName, SessionOpts.TRANSPORT_ANY); 

        if (adStatus != Status.OK){ 
         bus.releaseName(daemonName); 
         Log.e(TAG, "Failed to advertise daemon name: '" + daemonName + "', Error: '" + status + "'"); 
        } 
        else{ 
         Log.d(TAG, "Succefully advertised daemon name: '" + daemonName + "'"); 
        } 
       } 
       else { 
        Log.e(TAG, "Failed to request daemon name: '" + daemonName + "', Error: '" + status + "'"); 
       } 
      } 


      status = bus.registerSignalHandlers(mControlPanelSignalInterface); 

      if (status != Status.OK) { 
       Log.d(TAG, "Problem while registering signal handlers"); 
      } 

      // Initialize AboutService 

      aboutClient = AboutServiceImpl.getInstance(); 
      aboutClient.setLogger(logger); 
      try { 
       aboutClient.startAboutClient(bus); 

       for (String iface : ANNOUNCE_IFACES) { 


        aboutClient.addAnnouncementHandler(this, new String[] {iface}); 

       } 
      } catch (Exception e) { 

       logger.error(TAG, "Unable to start AboutService, Error: " + e.getMessage()); 

      } 


     } 
+0

आप बुलाना चाहिए का समाधान करना चाहिए inplements बनाने 'registerBusObject के लिए 'दो बार (प्रत्येक सेंसर के लिए एक बार) और केवल एक एकल बस अनुलग्नक बनाना – Lino

+0

मैंने इस bu की कोशिश की थी टी सफलता नहीं है। अब मैं दो अलग-अलग बसों में दो अलग-अलग बस एटैचमेंट ऑब्जेक्ट बना रहा हूं लेकिन एक ही त्रुटि हो रही है। अब मैं इस मुद्दे को कैसे हल कर सकता हूं? –

+0

वह पंक्ति है जो 'BusAlreadyExistException' फेंकता है? – Lino

उत्तर

1

उपयोग registerBusObject twince और फिर आप कर सकते हैं एक signle बस लगाव

+0

मैंने यह किया है लेकिन एक ही त्रुटि मिली है। –

0

कारण है कि आप दो इंटरफेस क्रमश: एक संवेदक के लिए एक इंटरफ़ेस बनाने नहीं है। फिर इन दो इंटरफेस को एक कक्षा में जोड़ें जो इन दो इंटरफेस और बस ऑब्जेक्ट को लागू करता है और BusObject के रूप में इस कक्षा का एक अपूर्णता पंजीकृत करता है।

उदाहरण

Sensor1_interface.java and Sensor2_interface.java //are my two interface classes

एक नया वर्ग Sensor_InterfaceList जो दो इंटरफेस और BusObject

class Sensor_InterfaceList implements Sensor1_interface,Sensor2_interface,BusObject 
    { 
    // implment your interfaces here 
    ..... 
    } 
private Sensor_InterfaceList mySensor_InterfaceList; 
mySensor_InterfaceList = new Sensor_InterfaceList(); 
myBus.registerBusObject(mySensor_InterfaceList,"/your/path"); 

यह आपकी समस्या :)

+0

या आप एक ही बस पर दो ऑब्जेक्ट्स जोड़ सकते हैं लेकिन विभिन्न पथों पर। उदाहरण 'myBus.registerBusObject (mySensor1, "/ my/path1"); myBus.registerBusObject (mySensor2, "/ मेरी/Path2"); ' –

संबंधित मुद्दे