2012-03-20 12 views
6

Ten błąd pojawia się w dzienniku.Przesyłanie plików za pomocą klapsów w aplikacjach na Androida.

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> 

mam użyć poniższy kod tutaj

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

której wersji smack używasz? – Hussain

+0

Asmack15 Próbuję od 5 dni, ale nadal nie jestem w stanie przesłać pliku za pomocą klapsa. Jeśli masz jakiś pomysł odnośnie tego, proszę pomóż – Kutbi

+0

@Hussain używam tej wersji smack: -asmack-android-7-beem.jar –

Odpowiedz

1

I rozwiązać ten sam problem, wykonując tę ​​następującą procedurę.

Używam asmack-2010.05.07-source w Zaćmienie dla Androida 2.2.

Przejdź do klasy ProviderManager w asmack. Wymień następujący kod

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

z tym

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

Po tym trzeba zrobić poprawkę. Dodaj następującą funkcję, zanim utworzysz . Ta funkcja może być wywoływana za pomocą metody

configure(ProviderManager.getInstance()); 

To jest metoda.

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()); 
} 

Mam roztwór z poniższego linku http://code.google.com/p/asmack/issues/detail?id=23

+0

próbowałem tego .. Ale mój problem nadal tutaj. to nie jest rozwiązanie. –

+0

Jak dołączyć bibliotekę asmack do mojego projektu Android. Dostaję tyle błędów – Roster

1

Dzięki, Ale rozwiązać moje problemy .. Problem polega na tym, że naprzeciwko użytkownik nie jest zalogowany. Więc ja po prostu zainstalować sparkx formularz clinet http://www.igniterealtime.org/downloads/download-landing.jsp?file=spark/spark_2_6_3.exe i zalogowany przy użyciu innego użytkownika i to wszystko.

Poniżej znajduje się pełny działający kod. Musisz skonfigurować swój serwer i port w General.java również mam naprawionych użytkowników w działaniu, więc musisz to zmienić zgodnie z konfiguracją.

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

Powiązane problemy