2011-11-20 51 views
0

一個複選框,這是我寫的檢索位置coordiantes代碼:無法檢索位置座標上點擊黑莓

final EditField ed3=new EditField("Lat is ",""); 
    add(ed3); 
    final EditField ed4=new EditField("Lon is ",""); 
    add(ed4); 
CheckboxField cbf=new CheckboxField("test it",false); 
    add(cbf); 
    cbf.setChangeListener(new FieldChangeListener() { 

     public void fieldChanged(Field field, int context) { 
      // TODO Auto-generated method stub 
     try { 
      BlackBerryCriteria bc=new BlackBerryCriteria(GPSInfo.GPS_MODE_CELLSITE); 
      LocationProvider lp3 = LocationProvider.getInstance(bc); 
      Location loc = null; 
      loc = lp3.getLocation(-1); 
      if(loc != null) 
      { 
       QualifiedCoordinates qc=loc.getQualifiedCoordinates(); 
       double lat=qc.getLatitude(); 
       double lon=qc.getLongitude(); 
       ed3.setText(lat+""); 
       ed4.setText(""+lon); 
      } 
      } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     } 
    }); 

} 

,但我無法獲取的座標。兩個編輯字段都留空。這裏有什麼問題?請幫助我。謝謝

回答

1

一個問題是您正在事件線程(服務字段已更改事件)上進行阻塞調用(getLocation(-1))。

這在黑莓平臺上是非常糟糕的做法。

另一個問題可能是您的服務提供商是否支持CELLSITE模式。

+0

好的,然後告訴我好的做法。服務提供商沒有問題。因爲我已經通過檢索位置進行了測試,而沒有單擊複選框(每30秒自動更新一次編輯字段) – Pramod

+0

任何阻塞或長時間運行的進程都需要在單獨的線程上運行。 RIM在其網頁上提供的編碼風格指南中介紹了這一點,以幫助開發人員開始使用BlackBerry平臺。 – Richard

+0

事實上,getLocation應該在事件線程中調用時引發異常。你應該在一個單獨的線程上運行它,比如@Richard Mentioned,並且讓該線程更新該字段。 – Tamar