Не удается поймать исключение (GLS НЕ УДАЛ С СОСТОЯНИЕМ 20) - PullRequest
0 голосов
/ 24 января 2011

Я пытаюсь найти географическую пару, длинную пару.Когда нет исключений, он прекрасно работает.

Logcat:

GLS Failed With Status 20

Код выглядит следующим образом:

//TAG GEOCODING METHOD
    public Address getAddressForLocation(Context context, Location location) throws IOException {

     Address a = null;
     try{
        if (location == null) {
            a=null;
        }
        double latitude = location.getLatitude();
        double longitude = location.getLongitude();
        int maxResults = 1;


        Geocoder gc = new Geocoder(context, Locale.getDefault());
        List<Address> addresses = gc.getFromLocation(latitude, longitude, maxResults);


        if (addresses.size() == 1) {
            a=addresses.get(0);
        } else {
            a=null;
        }
     }catch (Exception e){
      Log.w("EXCEPTON!", "Exception Caught in geocode");
      a=null;
     }
     return a;
    }

Вызов также упакован в блок try / catch.

 @Override//TAG On Location Changed
    public void onLocationChanged(Location arg0) {
//SET ALL VALUES
            dlat = arg0.getLatitude();
            dlon = arg0.getLongitude();

            delev = arg0.getAltitude() * 3.2808399;
            delev = round(delev, 2);

//GET THE ADDRESS
              try {
                addy = getAddressForLocation(this,arg0);
               } catch (Exception e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
                }
                _lastaddy = _addy;
                //DISPLAY ALL INFORMATION
                 _addy = addy.getAddressLine(0);  
                    LONGBOX.setText(String.valueOf(dlon));
                   LATBOX.setText(String.valueOf(dlat));
if(_addy!=_lastaddy){
                      ADDRESS.setText(_addy);
}

                  }

Остальная часть logcat ниже.Любая помощь с этим будет БОЛЬШОЙ.Я не могу поймать это исключение и долго смотрел на этот код и до сих пор не знаю, что я сделал неправильно.

LOGCAT:

LocationMasfClient  reverseGeocode(): GLS failed with status 20
AndroidRuntime      Shutting down VM
dalvikvm            threadid=1: thread exiting with uncaught exception (group=0x400208b0)
AndroidRunTime      FATAL EXCEPTION: main
AndroidRunTime      java.lang.NullPointerException

1 Ответ

1 голос
/ 24 января 2011

Я думаю, проблема в том, что вы перехватываете исключение, но затем возвращаете (и в конечном итоге пытаетесь использовать) нулевой объект Address в getAddressForLocation

catch (Exception e){
      Log.w("EXCEPTON!", "Exception Caught in geocode");
      a=null;
     }
     return a;

Итак, в этот момент addy будет нулевым:

addy = getAddressForLocation(this,arg0);

Когда вы перейдете на использование addy, вы получите NullPointerException

_addy = addy.getAddressLine(0);  

. Перед тем, как использовать его, вам нужно либо проверить, является ли addy нулевым, либо броситьException вы ловите в getAddressForLocation и обрабатываете в onLocationChange

...