2015-12-23 11 views
2

При загрузке файла он показывает, как загружается прогресс в уведомлении или где-то еще. Но я думаю, что это не по умолчанию в приложении cn1. Я хочу добавить слушателя прогресса. Как заставить его работать?Реализовать индикатор выполнения загрузки

if (!FileSystemStorage.getInstance().exists(filename)) {    
     com.codename1.io.Util.downloadUrlToFile(PdfUrl, filename, true); 
} 

ответ

1

В моем случае использовался следующий код.

/** 
* Adaptation of Util.downloadUrlTo 
*/ 
private boolean downloadUrlToAdapt(String url, final String fileName, boolean storage, final Slider slider) { 
    final ConnectionRequest cr = new ConnectionRequest(); 
    cr.setPost(false); 
    cr.setFailSilently(true); 
    cr.setUrl(url); 
    if (storage) { 
     cr.setDestinationStorage(fileName); 
    } else { 
     cr.setDestinationFile(fileName); 
    } 

    NetworkManager.getInstance().addProgressListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      if (evt instanceof NetworkEvent) { 
       NetworkEvent e = (NetworkEvent) evt; 
       if (e.getProgressPercentage() >= 0) { 
        slider.setText(e.getProgressPercentage() + "%"); 
        slider.setProgress(e.getProgressPercentage()); 
       } 
      } 
     } 
    }); 
    NetworkManager.getInstance().addToQueueAndWait(cr); 

    return cr.getResponseCode() == 200; 
} 

Мне нужно было показать прогресс загрузки видео. Я надеюсь, что это помогает.

+0

Thankyou @Sadart Abukari ... ВГА вы реализуете отменить загрузку тоже? Это было очень полезно ... – beck

+0

@beck Вы можете использовать метод kill() ConnectionRequest для отмены загрузки. Предложение ниже. Это означает, что этот метод downloadUrlToAdapt выше не будет возвращать только код responseCode. Он должен вернуть массив или хэш-карту, содержащую статус responseCode и сам объект ConnectionRequest, чтобы метод kill() мог действовать на него в любом месте. –

0

Способ, которым браузер загружает файл локально, является особым случаем для браузеров и не связан с приложениями. Вы можете просто вызвать Display.execute с файлом, и браузер загрузит его таким образом, хотя я предполагаю, что это не то, что вам нужно, так как оно не будет доступно вам после этого факта.

Вы можете показать прогресс с помощью прослушивателя хода NetworkManager. Отображение прогресса в области уведомлений - это специфическое поведение Android и необычное для iOS. Но вы, возможно, сможете использовать некоторые из местных функций уведомления https://www.codenameone.com/blog/local-notifications.html

0

Я использовал его так же, как Садарт Абукари.

Единственное, что я изменился, я использовал ToastBar.Status вместо того, чтобы показать прогресс

[...] 
    NetworkManager.getInstance().addProgressListener((evt) -> { 
     if (evt instanceof NetworkEvent) { 
      NetworkEvent e = (NetworkEvent) evt; 
      if (e.getProgressPercentage() >= 0) { 
       status.setProgress(e.getProgressPercentage()); 
      } 
     } 
    }); 

    NetworkManager.getInstance().addToQueueAndWait(cr); 
    //Clear the ToastBar 
    status.clear(); 
    return cr.getResponseCode() == 200; 
}