2012-03-20 19 views
6

यह त्रुटि लॉग में आती है।एंड्रॉइड ऐप्स में स्मैक का उपयोग करके फ़ाइल स्थानांतरण।

from='[email protected]/Smack' to='[email protected]/Smack' type='error' id='hK1L6-5'> 
<si xmlns='http://jabber.org/protocol/si' id='jsi_191216212994140179' mime-type='image/png' profile='http://jabber.org/protocol/si/profile/file-transfer'> 
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='this_old_house.png' size='12623'> 
<desc>You won&apos;t believe this!</desc></file> 
<feature xmlns='http://jabber.org/protocol/feature-neg'> 
<x xmlns='jabber:x:data' type='form'><field var='stream-method' type='list-multi'> 
<option><value>http://jabber.org/protocol/bytestreams</value></option> 
<option><value>http://jabber.org/protocol/ibb</value></option> 
</field> 
</x> 
</feature> 
</si> 
<error code='503' type='cancel'> 
<service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> 
</error></iq> 

मैं

ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(Main.connection); 
    if (sdm == null) 
     sdm = new ServiceDiscoveryManager(Main.connection); 
    sdm.addFeature("http://jabber.org/protocol/disco#info"); 
    sdm.addFeature("jabber:iq:privacy"); 

    FileTransferNegotiator.setServiceEnabled(Main.connection, true); 
    FileTransferManager manager = new FileTransferManager(Main.connection); 
    OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(id 
      + "/Smack"); 

    Log.i("transfere file", "outgoingfiletransfere is created"); 
    try{ 
     //OutgoingFileTransfer.setResponseTimeout(60000); 
     transfer.sendFile(new File(txt_file.getText().toString()), "You won't believe this!"); 

     if (transfer.getStatus().equals(Status.cancelled) 
       || transfer.getStatus().equals(Status.refused)) { 
       Log.d("Cancel", ""+transfer.getError()); 
       System.out.println("Cancelled!!! " + transfer.getError()); 
      } 

     Log.i("transfere file", "sending file"); 
     Log.d("FTTRY", "m in ft TRY"); 
     btn_transfer.setText("Browse"); 
     txt_file.setText("click on browse n Select File"); 
     send_flag = true; 
    }catch (Exception e) { 
     Log.d("FTCATCH", "m in ft catch"); 
     btn_transfer.setText("BrowseC"); 
     send_flag = true; 
    } 

    while(!transfer.isDone()) { 
     try{ 
      Thread.sleep(1000); 
     }catch (Exception e) { 
     } 
      Log.i("transfere file", "sending file status " 
         + transfer.getStatus() + "progress: " 
         + transfer.getProgress()); 
     if(transfer.getStatus().equals(Status.error)) { 
      System.out.println("ERROR!!! " + transfer.getError()); 
     } else { 
      System.out.println(transfer.getStatus()); 
      System.out.println(transfer.getProgress()); 
      Log.d("PROG", "m in ft progress"); 
     } 
     try{ 
     Thread.sleep(1000); 
     }catch (Exception e) { 
    } 
} 
+0

क्या आप स्मैक का संस्करण उपयोग कर रहे हैं? – Hussain

+0

asmack15 मैं 5 दिनों से कोशिश करता हूं लेकिन फिर भी मैं स्मैक के माध्यम से फ़ाइल स्थानांतरित करने के लिए सक्षम नहीं हूं। यदि आपको इसके बारे में कोई विचार है तो कृपया – Kutbi

+0

@ हुसैन की सहायता करें मैंने स्मैक के इस संस्करण का उपयोग किया है: -asmैक-android-7-beem.jar –

उत्तर

1

मैं इस निम्न कार्यविधि करने से एक ही समस्या हल हो जाती कोड यहाँ निम्नलिखित का उपयोग किया है।

मैं asmack-2010.05.07-स्रोत का उपयोग एंड्रॉइड-2.2 के लिए ग्रहण में कर रहा हूं।

Asmack में ProviderManager क्लास के लिए जाएं। इस

Enumeration providerEnum = classLoader.getResources(
         "/data/smack.providers"); 

यह आप एक पैच करने की जरूरत है के बाद से निम्नलिखित कोड

Enumeration providerEnum = classLoader.getResources(
         "/META-INF/smack.providers"); 

बदलें। new XMPPConnection बनाने से पहले निम्न फ़ंक्शन जोड़ें। आप इस फ़ंक्शन को

configure(ProviderManager.getInstance()); 

यह विधि कह सकते हैं।

public void configure(ProviderManager pm) { 

    // Private Data Storage 
    pm.addIQProvider("query","jabber:iq:private", new PrivateDataManager.PrivateDataIQProvider()); 


    // Time 
    try { 
     pm.addIQProvider("query","jabber:iq:time", Class.forName("org.jivesoftware.smackx.packet.Time")); 
    } catch (ClassNotFoundException e) { 
     Log.w("TestClient", "Can't load class for org.jivesoftware.smackx.packet.Time"); 
    } 

    // Roster Exchange 
    pm.addExtensionProvider("x","jabber:x:roster", new RosterExchangeProvider()); 

    // Message Events 
    pm.addExtensionProvider("x","jabber:x:event", new MessageEventProvider()); 

    // Chat State 
    pm.addExtensionProvider("active","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("composing","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("paused","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("inactive","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    pm.addExtensionProvider("gone","http://jabber.org/protocol/chatstates", new ChatStateExtension.Provider()); 

    // XHTML 
    pm.addExtensionProvider("html","http://jabber.org/protocol/xhtml-im", new XHTMLExtensionProvider()); 

    // Group Chat Invitations 
    pm.addExtensionProvider("x","jabber:x:conference", new GroupChatInvitation.Provider()); 

    // Service Discovery # Items  
    pm.addIQProvider("query","http://jabber.org/protocol/disco#items", new DiscoverItemsProvider()); 

    // Service Discovery # Info 
    pm.addIQProvider("query","http://jabber.org/protocol/disco#info", new DiscoverInfoProvider()); 

    // Data Forms 
    pm.addExtensionProvider("x","jabber:x:data", new DataFormProvider()); 

    // MUC User 
    pm.addExtensionProvider("x","http://jabber.org/protocol/muc#user", new MUCUserProvider()); 

    // MUC Admin  
    pm.addIQProvider("query","http://jabber.org/protocol/muc#admin", new MUCAdminProvider()); 


    // MUC Owner  
    pm.addIQProvider("query","http://jabber.org/protocol/muc#owner", new MUCOwnerProvider()); 

    // Delayed Delivery 
    pm.addExtensionProvider("x","jabber:x:delay", new DelayInformationProvider()); 

    // Version 
    try { 
     pm.addIQProvider("query","jabber:iq:version", Class.forName("org.jivesoftware.smackx.packet.Version")); 
    } catch (ClassNotFoundException e) { 
     // Not sure what's happening here. 
    } 

    // VCard 
    pm.addIQProvider("vCard","vcard-temp", new VCardProvider()); 

    // Offline Message Requests 
    pm.addIQProvider("offline","http://jabber.org/protocol/offline", new OfflineMessageRequest.Provider()); 

    // Offline Message Indicator 
    pm.addExtensionProvider("offline","http://jabber.org/protocol/offline", new OfflineMessageInfo.Provider()); 

    // Last Activity 
    pm.addIQProvider("query","jabber:iq:last", new LastActivity.Provider()); 

    // User Search 
    pm.addIQProvider("query","jabber:iq:search", new UserSearch.Provider()); 

    // SharedGroupsInfo 
    pm.addIQProvider("sharedgroup","http://www.jivesoftware.org/protocol/sharedgroup", new SharedGroupsInfo.Provider()); 

    // JEP-33: Extended Stanza Addressing 
    pm.addExtensionProvider("addresses","http://jabber.org/protocol/address", new MultipleAddressesProvider()); 

    // FileTransfer 
    pm.addIQProvider("si","http://jabber.org/protocol/si", new StreamInitiationProvider()); 

    pm.addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider()); 

    pm.addIQProvider("open","http://jabber.org/protocol/ibb", new IBBProviders.Open()); 

    pm.addIQProvider("close","http://jabber.org/protocol/ibb", new IBBProviders.Close()); 

    pm.addExtensionProvider("data","http://jabber.org/protocol/ibb", new IBBProviders.Data()); 

    // Privacy 
    pm.addIQProvider("query","jabber:iq:privacy", new PrivacyProvider()); 

    pm.addIQProvider("command", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider()); 
    pm.addExtensionProvider("malformed-action", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.MalformedActionError()); 
    pm.addExtensionProvider("bad-locale", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadLocaleError()); 
    pm.addExtensionProvider("bad-payload", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadPayloadError()); 
    pm.addExtensionProvider("bad-sessionid", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.BadSessionIDError()); 
    pm.addExtensionProvider("session-expired", "http://jabber.org/protocol/commands", new AdHocCommandDataProvider.SessionExpiredError()); 
} 

मैं नीचे दिए गए लिंक से समाधान http://code.google.com/p/asmack/issues/detail?id=23

+0

मैंने यह कोशिश की है..लेकिन मेरी समस्या अभी भी यहां है। यह हल नहीं है। –

+0

मेरे एंड्रॉइड प्रोजेक्ट के लिए एस्मैक लाइब्रेरी को कैसे शामिल करें। मुझे बहुत सारी त्रुटियां मिल रही हैं – Roster

1

धन्यवाद, मिला लेकिन मैं अपने समस्याओं को हल .. समस्या यह है कि विपरीत उपयोगकर्ता के लॉग इन नहीं है। तो मैं बस sparkx clinet रूप स्थापित किया है http://www.igniterealtime.org/downloads/download-landing.jsp?file=spark/spark_2_6_3.exe और अन्य उपयोगकर्ता का उपयोग कर लॉग इन करें और यह है।

निम्नलिखित पूर्ण कार्य कोड है। आपको अपने सर्वर और पोर्ट को सामान्य.जावा में सेट अप करने की आवश्यकता है, मैंने भी उपयोगकर्ताओं को गतिविधि में निश्चित किया है ताकि आपको इसे अपनी कॉन्फ़िगरेशन के अनुसार बदलना होगा।

https://sites.google.com/site/fancifulandroid/android-projects/FiletransfarXMPP.rar?attredirects=0&d=1

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