Экран Blackberry обновляется новыми данными - PullRequest
0 голосов
/ 29 сентября 2011

Я занимаюсь разработкой приложения для Blackberry.У меня есть карта на экране.Я хочу обновить данные карты новыми данными, которые я получаю от своего веб-сервиса.Я использую BlockingSenderDestination в теме.Когда я запрашиваю «получить данные», он возвращает новые данные.нет проблем.Я использую функцию invokelater для вызова моей функции maprefresh с передачей аргументов, но я получил нелегальное исключение argumentexception.

Любое предложение, чтобы решить мою проблему, или любой другой лучший способ сделать это?

Вот мой код:

  public class MyMainScreen extends MainScreen  {
    RichMapField map;
    MyClassList _myclassList;
  private String _result2t;

    public MyMainScreen(JSONArray jarray)
    {


  map = MapFactory.getInstance().generateRichMapField();
        MapDataModel mapDataModel = map.getModel();

         JSONObject json = null;
            boolean getdata=false;
            for (int i=0;i<jarray.length();i++)
            {

                try
                {
            json=jarray.getJSONObject(i);
                getdata=true;
                }
                catch(Exception e)
                {

                }

                if(getdata)
                {
                    try
                    {                       
                     double  lat = Double.valueOf(json.getString("LATITUDE")).doubleValue();
                 double  lng  = Double.valueOf(json.getString("LONGITUDE")).doubleValue();               
                 String myclassdata= json.getString("myclassdata").toString(); 
                 MyClass ben =  new MyClass(myclassdata);                
                 _myclassList.addElement(ben);      
                 MapLocation termimapitem = new MapLocation( lat, lng, "","");
                 mapDataModel.add((Mappable)termimapitem,"1");
                    }

                    catch(Exception e)
                    {
                        //mesajGoster("Hatalı Veri");
                    }

                }
                else
                {
                    //mesajGoster("Listeye Eklenemedi");
                }
            }
     }


    private void GetTerminals(String companyNo){
        final String companyNoR= companyNo;
        Thread t = new Thread(new Runnable() 
        {
            public void run()
            {
                Message response = null;
                String uriStr = "http://webservice";                
                BlockingSenderDestination bsd = null;
                try
                {
                    bsd = (BlockingSenderDestination)
                               DestinationFactory.getSenderDestination
                                   ("o", URI.create(uriStr));
                    if(bsd == null)
                    {
                        bsd =
                          DestinationFactory.createBlockingSenderDestination
                              (new Context("o"),
                               URI.create(uriStr)
                               );
                    }

                    response = bsd.sendReceive();

                    if(response != null)
                    {   
                        BSDResponse(response,companyNoR);
                    }
                }
                catch(Exception e)
                {
                }
                finally
                {
                    if(bsd != null)
                    {
                        bsd.release();
                    }
                }
            }

        });
        t.start();  

    }

    private void BSDResponse(Message msg,final String companyNo)
    {

        if (msg instanceof ByteMessage)
        {
            ByteMessage reply = (ByteMessage) msg;
            _result2t = (String) reply.getStringPayload();
        } else if(msg instanceof StreamMessage)
        {
            StreamMessage reply = (StreamMessage) msg;
            InputStream is = reply.getStreamPayload();
            byte[] data = null;
            try {
                data = net.rim.device.api.io.IOUtilities.streamToBytes(is);
            } catch (IOException e) {
                // process the error
            }
            if(data != null)
            {
                _result2t = new String(data);
            }
        }
        try {
                final JSONArray jarray= new JSONArray(_result2t);               
          final String username=_userName;
          UiApplication.getUiApplication().invokeLater(new Runnable() {
                    public void run() {
                         Dialog.alert("The Toolbar i");
                        Yenile(jarray);
                    }

                });

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



    private void Yenile(JSONArray jarray){
        MapDataModel mapDataModel = map.getModel();
        mapDataModel.remove("1");
        map.getMapField().update(true);
        _terminalList = new TerminalList();
        map= MapFactory.getInstance().generateRichMapField();
        MapDataModel mapDataModel = map.getModel();
        JSONObject json = null;
        boolean getdata=false;
        for (int i=0;i<jarray.length();i++)
        {

            try
            {
        json=jarray_terminaller.getJSONObject(i);
            getdata=true;
            }
            catch(Exception e)
            {

            }

            if(getdata)
            {
                try
                {                       

                 double  lat = Double.valueOf(json.getString("LATITUDE")).doubleValue();
                 double  lng  = Double.valueOf(json.getString("LONGITUDE")).doubleValue();

                 String myclassdata= json.getString("myclassdata").toString(); 
                 MyClass ben =  new MyClass(myclassdata);                
                 _myclassList.addElement(ben);      
                 MapLocation termimapitem = new MapLocation( lat, lng, "","");
                 mapDataModel.add((Mappable)termimapitem,"1");
                }

                catch(Exception e)
                {
                    //mesajGoster("Hatalı Veri");
                }

            }
            else
            {
                //mesajGoster("Listeye Eklenemedi");
            }
        }


    }
}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2011

Я нашел решение своего вопроса.

После получения данных я отправлял их с помощью нового метода запуска:

UiApplication.getUiApplication().invokeLater(new Runnable() {
 public void run() {
         MyFunction(jarray);
       }});

Но мне нужно было синхронизироваться с основным потоком. Итак, решение:

UiApplication.getUiApplication().invokeLater(new Runnable() {
              public void run() {
                     synchronized(Application.getEventLock()) {
                         Yenile(jarray);
                     }

                }

            });
0 голосов
/ 30 сентября 2011

Чтобы обновить экран: сделайте так:

public class LoadingScreen extends MainScreen{
LoadingScreen()
{
    createGUI();
}
public void createGUI()
{
    //Here you write the code that display on screen;
}}

мы знаем, что это реальный способ создания экрана;

Теперь, если вы хотите обновить экран, напишите какниже:

deleteAll();
invalidate();
createGUI();//here it creates the screen with new data.

Вместо записи в методе InvokeLater лучше написать вышеупомянутые три строки в методе run после Thread.sleep (10000);

Если у вас естьлюбые сомнения приходят в стек чата с именем « Life for Blackberry » в чате, чтобы уточнить ваши и наши сомнения.

...