2013-03-14 2 views
3

Я разрабатываю чат-приложение, в котором мне нужно отправлять изображения между пользователями однорангового чата. Пока я могу отправить изображение, и мой fileryceiver также принимает запрос и начинает получать файл.Android-сервер aSmack XMPP filetransfer всегда отображается в процессе и состоянии 0

Но состояние печати всегда держать печать: LOG: Прогресс: 0,0 & Статус: В процессе

И после окончания резьбы - LOG ### FileTransfer не полностью. Статус: В процессе

Если я сделать этот поток запустить удаление пересчитать continuesly держать печать - Прогресс: 0,0 & Статус: В процессе

Иногда полное изображение получено позже .. что занимает много времени и много раз половину или размер 0.

private ServiceDiscoveryManager sdm;  
if (sdm == null) 
        sdm = new ServiceDiscoveryManager(connection); 
       Log.v("---fileReceive----","after discover connectin....."); 
       sdm.addFeature("http://jabber.org/protocol/disco#info"); 
       sdm.addFeature("jabber:iq:privacy"); 

       ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider()); 
       ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#items", new DiscoverItemsProvider()); 
       ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#info", new DiscoverInfoProvider()); 
       ProviderManager.getInstance().addIQProvider("si", "http://jabber.org/protocol/si", new StreamInitiationProvider()); 
       ProviderManager.getInstance().addIQProvider("query", "http://jabber.org/protocol/bytestreams", new BytestreamsProvider());      
       ProviderManager.getInstance().addIQProvider("open", "http://jabber.org/protocol/ibb", new OpenIQProvider()); 
       ProviderManager.getInstance().addIQProvider("data", "http://jabber.org/protocol/ibb", new DataPacketProvider()); 
       ProviderManager.getInstance().addIQProvider("close", "http://jabber.org/protocol/ibb", new CloseIQProvider()); 
       ProviderManager.getInstance().addExtensionProvider("data", "http://jabber.org/protocol/ibb", new DataPacketProvider()); 

       sdm = ServiceDiscoveryManager.getInstanceFor(connection); 


       FileTransferNegotiator.setServiceEnabled(connection, true); 
       FileTransferNegotiator.IBB_ONLY = true; 
       manager = new FileTransferManager(connection); 
       // Create the listener 
       // fListner=new FileTransferListener() { 
       manager.addFileTransferListener(new FileTransferListener() { 
        @Override 
        public void fileTransferRequest(FileTransferRequest request) { 
         // TODO Auto-generated method stub 
         Log.v("----Recieve File", 
           "new file transfere requesttttt------------"); 

         Log.v("-----file request","from" + request.getRequestor()); 

         // Accept it 

         try { 
          IncomingFileTransfer transfer = request.accept(); 
          Log.v("----transfer--","accepted"); 

          double percents = 0.0; 
          int currentCycle = 0; 
          transfer.recieveFile(new File(Environment.getExternalStorageDirectory().getPath()+"/"+transfer.getFileName())); 


           while(!transfer.isDone() && currentCycle < 100) { 
            if(transfer.getStatus().equals(Status.in_progress)) { 
             percents = ((int) (transfer.getProgress()*10000))/100.0; 
                //percents is 100.0 after 1 cycle 
             Log.i(LOG, "Filetransfer Progress: "+percents + " Status: "+transfer.getStatus().toString()); 
            } else if (transfer.getStatus().equals(Status.error)) { 
             Log.e(LOG, "FileTransfer ERROR"+transfer.getError().getMessage()); 
             break; 
            } 
            currentCycle ++; 
            try { 
             Thread.sleep(1000); 
            } catch (InterruptedException e) { 
             e.printStackTrace(); 
            } 
           } 

           if(transfer.getStatus().equals(Status.complete)) { 
            if (onFileReceivedListener != null) { 
             onFileReceivedListener.onFileReceived(transfer); 
            } 
           }else{ 
            Log.e(LOG, "###Filetransfer not complete. Status:" + transfer.getStatus().toString()); 
                 //FILE IS HERE 
           } 
         } catch (XMPPException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); ` 

Подсказка или помощь приветствуются.

+0

Какой сервер чата вы используете? –

+0

Это не совсем ответ, но хорошая отправная точка: https://github.com/Flowdalic/asmack/wiki/aSmack-XMPP-File-Transfer – Flow

+0

@ Vyoma вы сделали это? –

ответ

0

В последнее время у меня был небольшой опыт работы с asmack и smackx, и я не могу быть слишком уверенным в них.

Я не знаю, где именно возникла ваша проблема, но я могу сказать, что это нормально. Сначала вы получите нагрузку прогресса = 0, прежде чем начнется какой-либо прогресс. Если это небольшой файл, который вы отправляете, он просто посылает так быстро, что нет никакого реального прогресса.

Однако, если вы успешно отправили файл большего размера, эта функция работает очень хорошо и даст вам приблизительный прогресс.

В заключение мы пришли к выводу, что эта функция просто была связана с ошибкой и ограничена и реализована нашим собственным сообщением filetransfer xmpp и обрабатывает его отправку через наш собственный сервер. Подобным образом вы также можете отправлять файлы в автономный режим, в группах (MUC) и демонстрировать достойный прогресс с обеих сторон (отправка &).

+0

Спасибо 4 ответа ур. На самом деле прямо сейчас я получаю размер 0 для 6.71 kb изображения. И coudnt реализовать собственный сервер. Могу ли вы использовать рабочий код urz, если я могу получить какую-либо проблему. с моей стороны. – Vyoma

+0

Извините, что рабочий код ушел. Думаю, поскольку мы изменили его, чтобы использовать наш собственный сервер. Однако, как я уже сказал, попробуйте его с фотографиями нескольких МБ. 6kb отправляется слишком быстро. –

+0

Я пробовал изображение mbs, но, как я сказал для любого изображения на стороне приемника, он показывает размер изображения 0. Это означает, что он сохранен, но не полностью принят. – Vyoma

 Смежные вопросы

  • Нет связанных вопросов^_^