Загрузочный экран в BlackBerry - PullRequest
0 голосов
/ 05 июля 2011

Предположим, что это мой класс NeteorkingMainScreen, который будет отображать текст, полученный из Интернета.

   public NetworkingMainScreen() {
      setTitle("Networking");
      urlField = new EditField("URL:", "");
      textOutputField = new RichTextField();
      add(urlField);
      add(textOutputField);
   }
   protected void makeMenu(Menu menu, int instance) {
      super.makeMenu(menu, instance);
      menu.add(new MenuItem("Get", 10, 10) {
         public void run() {
            getURL();
         }
      });
   private void getURL() {
       HttpRequestDispatcher dispatcher = new HttpRequestDispatcher(urlField.getText(),"GET", this);
       dispatcher.start();
   } 


 //*********************************************************************************
 //HttpRequestDispatcher class performs the downloading of contents of webpage.
 public class HttpRequestDispatcher extends Thread {
 private String url;
 private String method; // GET or POST
 private NetworkingMainScreen screen;
 public HttpRequestDispatcher(String url, String method, NetworkingMainScreen screen){
     this.url = url;
     this.method = method;
     this.screen = screen;
 }
 public void run() {
 try{
     HttpConnection connection = (HttpConnection)Connector.open(url);
     connection.setRequestMethod(method);
     int responseCode = connection.getResponseCode();   
        if (responseCode != HttpConnection.HTTP_OK){
           screen.requestFailed("Unexpected response code: " + responseCode);
           connection.close();
           return;
        }
        String contentType = connection.getHeaderField("Content-type");
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        InputStream responseData = connection.openInputStream();
        byte[] buffer = new byte[10000];
        int bytesRead = responseData.read(buffer);

        while(bytesRead > 0) {
            baos.write(buffer, 0, bytesRead);
            bytesRead = responseData.read(buffer);
        }
        baos.close();
        connection.close();
        screen.requestSucceeded(baos.toByteArray(), contentType);
    }
    catch (IOException ex) {
       screen.requestFailed(ex.toString());
    }
 }
 }


 //***************************************************************************
 //WaitScreen displays animation till the downloading is completed.
 class WaitScreen extends FullScreen
 {
 }

Теперь я запутался ...

  1. Когда начинатькласс WaitScreen.Предположим, я начинаю с создания объекта WaitScreen и нажатия на экранный объект.

    protected void makeMenu(Menu menu, int instance) {
        super.makeMenu(menu, instance);
        menu.add(new MenuItem("Get", 10, 10) {
            public void run() 
                UiApplication.getUiApplication.pushScreen(new WaitScreen());
                getURL();
            }
         });
    

    Как мой код узнает, что он должен отображать анимированный экран и отображать содержимое веб-страниц, т.е. я имею в виду, как мой код узнает, что загрузка данных завершена.то есть когда я буду вызывать popScreen ()? I интерфейс должен использоваться, как использовать интерфейс и какую помощь мы получим, используя интерфейс.?Пожалуйста, помогите

Ответы [ 2 ]

3 голосов
/ 05 июля 2011

Это довольно просто.

Ваш HttpRequestDispatcher должен иметь дескриптор экземпляра WaitScreen, чтобы иметь возможность показать его при запуске и закрыть после завершения.

Таким образом, внутри HttpRequestDispatcher вы можете (1) создать WaitScreen. (2) Нажмите на нее. (3) Делай то, что должен делать HttpRequestDispatcher. (4) Нажмите на WaitScreen. Что-то вроде этого:

final WaitScreen waitScreen = new WaitScreen();

// just to reduce code duplication
final UiApplication app = UiApplication.getUiApplication();

// we are on the non-UI thread, so need 
// to use UiApplication.invokeLater(Runnable action),
// it safely runs the passed action on the UI thread
app.invokeLater(new Runnable() {
    public void run() {
        app.pushScreen(waitScreen);
    }
});

try {
    // main networking actions go here
} catch (..) {
    // error handling goes here
} finally {
    // make sure we close the waitScreen
    app.invokeLater(new Runnable() {
        public void run() {
            app.popScreen(waitScreen);
        }
    });
}
0 голосов
/ 11 августа 2011

Здесь, попробуйте это .Все, что вам нужно сделать, это поместить свой код в функцию «run».

Если вам нужна помощь с материалом HttpRequest или у вас возникли проблемы с классами, дайте мне знать.У меня есть веб-библиотека с классами потоков, настроенными на использование классов в этом посте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...