2015-12-11 3 views
2

Я пытаюсь загрузить изображение с FTP-сервера с помощью UIL. Для этого я создал FTPImageDownloader. Я использую apache-commons-ftpclient. Код указан ниже:Универсальный загрузчик изображений, скачать изображение с FTP

public class FTPImageDownloader implements ImageDownloader { 
public static String FTP_SERVER_HOST = "xx.xx.xxx.xxx"; 
public static int FTP_SERVER_PORT =xx; 
public static String FTP_LOGIN = "xxxxxxx"; 
public static String FTP_PASSWORD = "xxxxxxx"; 

@Override 
public InputStream getStream(String imageUri, Object extra) throws IOException { 


    return getFTPStream(imageUri); 
} 

public InputStream getFTPStream(String url) throws IOException { 
    FTPClient con = null; 
    final String imageUrl = url; 

    try 
    { 
     con = new FTPClient(); 
     con.connect(FTP_SERVER_HOST); 

     if (con.login(FTP_LOGIN, FTP_PASSWORD)) 
     { 
      con.enterLocalPassiveMode(); 
      con.setFileType(FTP.BINARY_FILE_TYPE); 

      return con.retrieveFileStream(imageUrl); 
     } 
    } 
    catch (Exception e) 
    { 
     Log.v("download result","failed"); 
     e.printStackTrace(); 
    } finally { 
     con.logout(); 
     con.disconnect(); 
    } 

return null; 
}} 

Это работает, но очень медленно. Это особенно заметно при одновременном загрузке нескольких изображений.

Я думаю, что причиной медленной работы ImageLoader является то, что каждая фотография открывает новое соединение. Если это так, то скажите мне, как сделать такие соединения, как singleton. Благодарю.

ответ

0

Проблема заключалась в использовании FTP-сервера. Теперь мы перешли на использование Http, все хорошо. Код, показанный в проблеме, работает, вы можете использовать его совместно с Universal Image Loader, если вы хотите загружать изображения с FTP.

0

Использовать очереди для нескольких сетевых вызовов, подобных этому https://github.com/path/android-priority-jobqueue.

+0

Благодарим вас за ответ, но Universal Image Loader lib (который я использую) справляется с несколькими загрузками изображений. Проблема заключается в реализации FTPImageDownloader, он получает изображение InputStream. – Alex

0

Попробуйте добавить разрешение Интернет в файле AndroidManifest.xml:

uses-permission android:name="android.permission.INTERNET" 
Смежные вопросы