2

我对 BlackBerry OS 开发有点陌生,我的代码LocationProvider在传递Criteria参数后尝试获取城市名称。我根据 RIM 本身的这个链接跟踪我尝试了“JSR-179”和“JSR-179 扩展”我的代码如下:

“使用 JSR 179”

public String CurrentLocation() 
    {
        try 
        {
            //LBS(Location Based Service) JSR-179
            Criteria criteria = new Criteria();
            criteria.isAddressInfoRequired();
            criteria.setCostAllowed(false);
            criteria.setAddressInfoRequired(true);
            criteria.setHorizontalAccuracy(200);
            criteria.setVerticalAccuracy(200);

            locationProvider = LocationProvider.getInstance(criteria);

            location = locationProvider.getLocation(10);
            cityName = location.getAddressInfo().getField(AddressInfo.CITY);
        } 
        catch (LocationException le) 
        {
            new Tracer("CurrentLocation() caught LocationException : " + le.getMessage());
            le.printStackTrace();
        }
        catch (InterruptedException ire) 
        {
            new Tracer("CurrentLocation() caught InterruptedException: " + ire.getMessage());
            ire.printStackTrace();
        }
        return cityName;
    }

带有 JSR-179 扩展

public String CurrentLocaiton(){
        try
        {
            BlackBerryCriteria BBCriteria = new BlackBerryCriteria();
            BBCriteria.setAddressInfoRequired(ProvideAddressInfoTExt);
            BBCriteria.setAltitudeRequired(true);
            BBCriteria.setSatelliteInfoRequired(true, true);
            BBCriteria.setCostAllowed(true);
            BBCriteria.setPreferredPowerConsumption(BlackBerryCriteria.POWER_USAGE_HIGH); //testing for high power

            BlackBerryLocationProvider bbLocationProvider 
                                                = (BlackBerryLocationProvider) 
                                                    BlackBerryLocationProvider.getInstance(BBCriteria);
            location = bbLocationProvider.getLocation(9000);
            QualifiedCoordinates qualCoor = location.getQualifiedCoordinates();
            cityName = location.getAddressInfo().getField(AddressInfo.CITY);
        }
        catch(LocationException le)
        {
            le.printStackTrace();
            System.out.println(le.getMessage());
        }
        catch(InterruptedException ie)
        {
            ie.printStackTrace();
            System.out.println(ie.getMessage());
        }
        catch(NullPointerException npe)
        {
            npe.printStackTrace();
            cityName = "Caught Null Pointer";
            Dialog.alert(npe.getMessage());
        }
        return cityName;
    }

我是否遗漏了一些东西或者有什么问题我已经在这个问题上苦苦挣扎了好几个小时了。我也尝试Null Pointer Exception从这个代码片段中捕获,如果从“静态 void main”中捕获,那么Uncaught Exception: pushModalScreen called by a non-event thread

        ....
        try{
            String location = cellLocation.CurrentLocation();
            LabelField towerlocationText = new LabelField(towerString + location,
                                LabelField.FOCUSABLE|LabelField.DEFAULT_POSITION);
            add(towerlocationText);
        }
        catch(NullPointerException npe)
        {
            npe.printStackTrace();
            System.out.println(npe.getMessage());
            Dialog.alert(npe.getMessage() + "" + "AddresInfo/LocationProvider/Locaiton gave null pointer exception" );
        }
        ...

在 BB-9700 BB-9790 设备以及模拟器 BB-9900上试用

谢谢,

4

1 回答 1

0
use 
Either :- 
/***/
      UiApplication.getUiApplication().invokeLater(new Runnable() 
        {
            public void run() 
            {
                Dialog.alert("Hello");
            }
        });
/***/
or      
        synchronized (UiApplication.getEventLock()) 
        {
                    Dialog.alert("Hello");
        }

无论您试图在非事件线程上显示对话框,您都应该需要一个事件锁。您可以使用上述方法使 Event Lock 阅读文章以获取更多信息。

于 2012-10-08T06:38:58.470 回答