2012-03-30 10 views
0

Ich habe einen Bildschirmnamen DownloaderScreen wenn der Bildschirm startet, wird es beginnen, einige Dateien herunterladen und wenn der Download abgeschlossen ist, wird es automatisch zum nächsten Bildschirm gehen. Ich benutze den folgenden Code.Blackberry Bildschirmnavigation

public DownloaderScreen() { 
     super(NO_VERTICAL_SCROLL | NO_HORIZONTAL_SCROLL | USE_ALL_HEIGHT 
       | USE_ALL_WIDTH); 

     this.application = UiApplication.getUiApplication(); 
     HorizontalFieldManager outerBlock = new HorizontalFieldManager(USE_ALL_HEIGHT); 
     VerticalFieldManager innerBlock = new VerticalFieldManager(USE_ALL_WIDTH | FIELD_VCENTER); 
     innerBlock.setPadding(0, 10, 0, 10); 
     outerBlock.setBackground(BackgroundFactory 
       .createBitmapBackground(LangValue.dlBgimg)); 
     outerBlock.add(innerBlock); 
     add(outerBlock); 

     phraseHelper = new PhraseHelper(); 
     final String[][] phraseList = phraseHelper.getDownloadList(); 

     gaugeField = new GaugeField("Downloading ", 0, phraseList.length, 0, GaugeField.PERCENT); 
     innerBlock.add(gaugeField); 

     Thread dlTread = new Thread() { 
      public void run() { 
       startDownload(phraseList); 
      } 
     }; 
     dlTread.start(); 

    } 

private void startDownload(String[][] phraseList){ 

     if(phraseList.length!=0){ 

      for(int i=0; i < phraseList.length ; i++){// 
       gaugeField.setValue(i); 
       // code for download 
      } 
     } 
     goToNext(); 
    } 

private void goToNext() { 

final Screen currentScreen = application.getActiveScreen(); 

    if (UiApplication.isEventDispatchThread()) { 
     application.popScreen(currentScreen); 
     application.pushScreen(new HomeScreen()); 
     } else { 
      application.invokeLater(new Runnable() { 
       public void run() { 
        application.popScreen(currentScreen); 
        application.pushScreen(new HomeScreen()); 
       } 
      }); 
     } 
} 

Der Code funktionieren gut und startet Download-Dateien und wenn der Download abgeschlossen ist es sich auf dem nächsten Bildschirm wird. Aber wenn es keine Datei zum Download phraseList Array-Länge gibt ist Null, es geht nicht vorwärts. Was ist ein Problem in meinem Code?

Antwort

1

Die GuageField nicht von 0 auf 0 gehen mag Wenn die Länge Null ist, fügen Sie nicht GuageField.

1

Ändern Sie den Code zu

if(phraseList.length!=0){ 

     for(int i=0; i < phraseList.length ; i++){// 
      gaugeField.setValue(i); 
      // code for download 
     } 
     goToNext(); 

    } 
    else{ 
     goToNext(); //if nothing to download, then it will goto the next screen. 
     }