开发者

Blackberry screen renew with new data

I am developing a Blackberry Application. I have a map in a screen. I want to refresh map's data with new data which i am getting from my web service. I am using BlockingSenderDestination in a Thread. When i request "get data" its return new data. no problem. I am using invokelater function to call my maprefresh function with passing arguments but i got illegalargumentexception.

Any suggestion to solve my problem or any better way to do this?

Here is my code:

  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");
            }
        }


    }
}


To refresh the screen: do like this:

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

we know that this is the actual way of creating a screen;

Now if you want to refresh the screen write like below:

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

Instead of writing in InvokeLater method better to write the above three lines in run method after Thread.sleep(10000);

If you have any doubts come on stackOverFlow chat room name "Life for Blackberry" for clarify your and our doubts.


I found a solution to my question.

After getting the data i was sending it via new run method:

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

But i was need to synchronize with main thread. So the solution:

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

                }

            });
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜