2011-10-19 41 views
0

我已经写底层代码而HHTP连接调用以显示activityindicator期间黑莓ActivityIndi​​cator未见。不幸的是,直到http连接调用完成后,活动指示符才显示在屏幕上。因此它没有达到其目的。HTTP连接

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