BlackBerry Curve недостаточно места для хранения - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть приложение, которое загружает видеофайл размером примерно 6 МБ

Я пытаюсь запустить это приложение на Blackberry Curve 9360, который имеет 32 МБ хранилища мультимедиа

Иногдаэто приложение запускается и может загрузить видео без проблем, однако в других случаях неполная загрузка через процесс загрузки завершается с ошибкой ввода-вывода, которая сообщает: «В файловой системе недостаточно свободной памяти для выполнения этого действия»

после сбоя таким образом, я могу открыть программное обеспечение BlackBerry Desktop и проверить раздел файлов и увидеть, что устройство действительно сообщает о заполнении 32/32 МБ.

Если я затем перезагружаюНа устройстве с alt-shift-del и открытием настольного программного обеспечения Blackberry снова используемое пространство сократилось до 5-6 / 32 МБ заполненного

Иногда в этот момент я могу запустить свое приложение сейчас и получить егоУспешная загрузка, но в других случаях она снова выдает мне ту же ошибку полного заполнения хранилища.Единственное, что я могу заметить, похоже, что это может повлиять на то, завершится ли это неудачей или нет, это то, сколько времени занимает загрузка (то есть, это происходит успешно по Wi-Fi, при хорошем сигнале 3g и при неудачном сигнале 3g, но в лучшем случае это анекдотично).)

Я использовал это одно и то же приложение на нескольких разных устройствах Blackberry, в том числе на нескольких других устройствах Curve с таким же объемом памяти, и никогда раньше не сталкивался с этой проблемой.

Мой вопрос: Кто-нибудь видел, как устройство кривой BlackBerry ведет себя так, что оно сообщает о неправильном объеме памяти, который исправляется перезагрузкой?

И есть ли что-то в этом коде загрузки, которое может вызывать такое поведение?

class DownloadThread extends Thread {
    public void run()
    {
        HttpConnection httpConn = null;
        InputStream is = null;
        try{

            httpConn = (HttpConnection)Connector.open(videoUrl + ";interface=wifi");
            is = httpConn.openInputStream();
        }catch(IOException e){
            try{
                httpConn = (HttpConnection)Connector.open(videoUrl);
                is = httpConn.openInputStream();
            }catch(IOException ioe){
                System.out.println("891: "+e.toString());
            }
        }


         try{

         if (!videoFconn.exists())
             videoFconn.create();
         else{
             videoFconn.delete();
             videoFconn.create();
         }
         OutputStream os = videoFconn.openOutputStream();
         lengthOfWebFile = httpConn.getLength();
         total = 0;
         System.out.println("##################### length of web file = " + lengthOfWebFile + " #################");
         byte data[] = new byte[256];
         while ((count = is.read(data)) != -1) {

             total += count;
             progress = (int)(total*100/lengthOfWebFile);
             if(model.getValue() < progress){
                 UiApplication.getUiApplication().invokeLater(new Runnable()
                 {
                     public void run()
                     {
                         EmbeddedMediaScreen.this.model.setValue(progress);
                     }
                 });
             }
             //write this chunk
             os.write(data, 0, count);

             Thread.yield();
         }
         os.flush();
         os.close();
         is.close();
         httpConn.close();
         lengthOfLocalFile = videoFconn.fileSize();
         System.out.println("###################### Local Length =  " + lengthOfLocalFile + "#####################");



         if(lengthOfLocalFile == lengthOfWebFile){
             amDownloading = false;
             startVideo();
         }else{
             downloadVideo();
         }
         }catch(FileNotFoundException fnf){

         }catch(IOException e){
             //ScreenSaverActivity.errorDialog("975: "+e.toString());
             System.out.println("980: "+e.toString());
             //e.printStackTrace();
         }catch(NullPointerException npe){
             System.out.println("983: "+npe.toString());
         } /*catch (InterruptedException e) {
                // TODO Auto-generated catch block
                System.out.println(e.getMessage());
            }*/
     }

     public synchronized void postProgress(final int p){
         UiApplication.getUiApplication().invokeLater(new Runnable()
         {
             public void run()
             {
                             //Set the progress bar
                 EmbeddedMediaScreen.this.model.setValue(p);
             }
         });
     }

}
...