2011-10-19 22 views
0

hhtp接続コールが行われている間にactivityindicatorを表示するための基礎コードを記述しました。残念ながら、HTTP接続コールが完了するまで、アクティビティインジケータは画面に表示されません。したがって、それはその目的に役立たない。HTTP接続中にBlackberry ActivityIndi​​catorが表示されない

UiApplication.getUiApplication().invokeAndWait(new Runnable() 
       { 
        public void run() 
        { 

         ActivityIndicatorView view = new ActivityIndicatorView(Field.USE_ALL_WIDTH); 
         ActivityIndicatorModel model = new ActivityIndicatorModel(); 
         ActivityIndicatorController controller = new ActivityIndicatorController(); 

         view.setController(controller); 
         view.setModel(model); 

         controller.setModel(model); 
         controller.setView(view); 

         model.setController(controller);   

         Bitmap bitmap = Bitmap.getBitmapResource("spinner.png"); 
         view.createActivityImageField(bitmap, 5, Field.FIELD_HCENTER); 

         _activityFieldManager.add(view); 
          UiApplication.getUiApplication().getActiveScreen().invalidate(); 

        } 
       }); 
       //SyncWithDB is the Class that makes the Http connection call 
       new SyncWithDB(); 
       _activityFieldManager.delete(view); 
       UiApplication.getUiApplication().getActiveScreen().invalidate(); 
       Dialog.inform("Sync Complete"); 

としては、私も

view = new ActivityIndicatorView(Field.USE_ALL_WIDTH); 
       ActivityIndicatorModel model = new ActivityIndicatorModel(); 
       ActivityIndicatorController controller = new ActivityIndicatorController(); 

       view.setController(controller); 
       view.setModel(model); 

       controller.setModel(model); 
       controller.setView(view); 

       model.setController(controller);   

       Bitmap bitmap = Bitmap.getBitmapResource("spinner.png"); 
       view.createActivityImageField(bitmap, 5, Field.FIELD_HCENTER); 

       _activityFieldManager.add(view); 
        UiApplication.getUiApplication().getActiveScreen().invalidate(); 

       UiApplication.getUiApplication().invokeAndWait(new Runnable() 
       { 
        public void run() 
        { 

         try { 
         new SyncWithDB(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        } 
       }); 


       _activityFieldManager.delete(view); 
       UiApplication.getUiApplication().getActiveScreen().invalidate(); 
       Dialog.inform("Sync Complete"); 

を試みたが、結果は同じまま示唆しました。

答えて

1

あなたはinvokeAndWait()を使用しているので、ワーカースレッドでHTTP操作を実行していますか?そうでなければ、あなたはすべきです。 ActivityIndi​​catorはメインディスパッチスレッドで管理し、HTTP操作はワーカースレッドで管理する必要があります。例えば

:もう少し一般的に

view = new ActivityIndicatorView(Field.USE_ALL_WIDTH); 
ActivityIndicatorModel model = new ActivityIndicatorModel(); 
ActivityIndicatorController controller = new ActivityIndicatorController(); 

view.setController(controller); 
view.setModel(model); 

controller.setModel(model); 
controller.setView(view); 

model.setController(controller);   

Bitmap bitmap = Bitmap.getBitmapResource("spinner.png"); 
view.createActivityImageField(bitmap, 5, Field.FIELD_HCENTER); 

_activityFieldManager.add(view); 
UiApplication.getUiApplication().getActiveScreen().invalidate(); 

Thread thread = new Thread() 
{ 
    public void run() 
    { 
    try { 
     new SyncWithDB(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    UiApplication.getUiApplication().invokeLater(
     new Runnable() 
     { 
     protected void run() 
     { 
      _activityFieldManager.delete(view); 
      UiApplication.getUiApplication().getActiveScreen().invalidate(); 
      Dialog.inform("Sync Complete"); 
     } 
     } 
    ); 
    } 
} 
thread.start(); 

または、:

ActivityIndicatorView view; 
ActivityFieldManager _activityFieldManager; 

class SyncFinished extends Runnable 
{ 
    public void run() 
    { 
    _activityFieldManager.delete(view); 
    UiApplication.getUiApplication().getActiveScreen().invalidate(); 
    Dialog.inform("Sync Complete"); 
    } 
} 

class SyncThread extends Thread 
{ 
    Runnable runWhenFinished; 

    public SyncThread(Runnable r) 
    { 
    super(); 
    runWhenFinished = r; 
    } 

    public void run() 
    { 
    try { 
     new SyncWithDB(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    if (runWhenFinished != null) 
     UiApplication.getUiApplication().invokeLater(runWhenFinished); 
    } 
} 

view = new ActivityIndicatorView(Field.USE_ALL_WIDTH); 
ActivityIndicatorModel model = new ActivityIndicatorModel(); 
ActivityIndicatorController controller = new ActivityIndicatorController(); 

view.setController(controller); 
view.setModel(model); 

controller.setModel(model); 
controller.setView(view); 

model.setController(controller);   

Bitmap bitmap = Bitmap.getBitmapResource("spinner.png"); 
view.createActivityImageField(bitmap, 5, Field.FIELD_HCENTER); 

_activityFieldManager.add(view); 
UiApplication.getUiApplication().getActiveScreen().invalidate(); 

SyncThread thread = new SyncThread(new SyncFinished()); 
thread.start(); 
+0

こんにちはレミー 私はあなたの提案を試みたが、それは助けにはなりませんでした。問題は解決しません。 他に何か提案してください。 よろしくお願いします。 – user977325

+0

あなたは何を試しましたか?更新されたコードを表示してください。 –

+0

こんにちはレミー、私のクエリの更新(秒)の部分を参照してください。私はこれがあなたが提案したものだと思います。 – user977325

関連する問題