2
votes

I'm having a strange problem while debugging my Blackberry Application on a real device (BB Bold 9700). When I debug the same application within the BB emulator, the app runs fine, but when I run it on the real device, the app behaves differently (custom painting goes completely wrong). What's even worse is that my Eclipse environment seems to be unable to view live objects correctly while being at a break point (debug time).

I've added a screenshot to illustrate the strange behaviour: enter image description here

As you can see, the app stops at the breakpoint within the IF statement, but the Variables pane says that the variable "methodName" equals null. Moreover, when I want to look at the variable "methodArguments" which is of type org.json.me.JSONArray, it says "details unavailable - not supported by VM".

Does anyone know what's going on here? My app works great on the emulator, but it's currently useless on the real device.

Thanks in advance!

2
Can you post screen shots of the app going wrong? What changes in the UI? I would guess the Eclipse debugging issue is a separate one...Tamar

2 Answers

0
votes

I think I fixed it:

The problem was that I was laying out Fields on a manager that wasn't yet added to the viewstack.

What did the trick for me was overriding onDisplay() in the manager that contained the Fields that were displayed wrong:

protected void onDisplay()
{
    //Make sure superclass is called
    super.onDisplay();

    /*You have to call "this.setDirty(true)" when you perform layout on a
     *manager that isn't added to the viewstack. Then you can use
     *"this.isDirty()" to determine whether you need to re-layout the fields
     *when the manager becomes visible.*/       
    if(this.isDirty())
    {
        //I'm not sure if I need to use "invokeAndWait" and not "invokeLater"
        UiApplication.getUiApplication().invokeAndWait(new Runnable()
        {
            public void run()
            {
                for (int i = 0; i < getFieldCount(); i++)
                {
                    /*This (custom) function makes sure the Field gets its
                     *size and position*/
                    layoutItem(getField(i));
                }
            }
        });
        //Make sure you set "dirty" to false, to make sure this only happens once
        this.setDirty(false);
    }
}

If anyone has a better solution, I'd be glad to hear it (and maybe improve my app).

0
votes

org.json.me.JSONArray, it says "details unavailable - not supported by VM".

the JSON related stuff is not available on device running 4.5 and 4.6 BB OS. Import it into the code.

Download it from here.
https://github.com/douglascrockford/JSON-java

it is available as Open Source and then use it into your applications.