2011-10-19 6 views
0

hhtp 연결 호출이 이루어지는 동안 activityindicator를 표시하는 기본 코드를 작성했습니다. 불행히도, HTTP 연결 호출이 완료 될 때까지 화면에 활동 표시기가 나타나지 않습니다. 그러므로 그것의 목적에 부합하지 않는다.HTTP 연결 중에 Blackberry ActivityIndicator가 표시되지 않음

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 작업을 수행하고 있습니까? 그렇지 않다면,해야합니다. ActivityIndicator는 기본 발송 스레드에서 관리하고 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