gps android出错

时间:2011-12-06 16:11:48

标签: android locationmanager

当我尝试通过gps或网络获取当前位置时,我的应用中出现GPS错误

private static LocationManager lm;
private static LocationListener locationListener;
private static Location posicion;   
private double latitud;
private double longitud;

posicion = ObtenPosicion();       
        latitud = posicion.getLatitude();
        longitud= posicion.getLongitude();

        //Me centro en el mapa
        final GeoPoint yo = new GeoPoint((int)(latitud),(int)(longitud));   

 public Location ObtenPosicion(){
     if (lm == null)
        {
            lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);    

            locationListener = new LocListener();

            if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER))
            {
                lm.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, 
                    LOCATION_UPDATE_TIME, 
                    LOCATION_UPDATE_DISTANCE, 
                    locationListener);

                posicion = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            }

            if (lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
            {
                        lm.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER, 
                        LOCATION_UPDATE_TIME, 
                        LOCATION_UPDATE_DISTANCE,  
                        locationListener);

                posicion = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            }
        }
        return posicion;
    }



 private class LocListener implements LocationListener 
    {
        @Override
        public void onLocationChanged(Location loc) {
           posicion.set(loc);
        }

        @Override
        public void onProviderDisabled(String provider) {

        }

        @Override
        public void onProviderEnabled(String provider) {
        }

        @Override
        public void onStatusChanged(String provider, int status, 
            Bundle extras) {
        }


    }  

    public static Location getCurrentLocation ()
    {
        return posicion;
    }

    public void stopLocationListening ()
    {
        if (lm != null)
            lm.removeUpdates(locationListener);

    }

错误是一行中的nullpointerexception:

12-06 17:04:25.418: E/AndroidRuntime(4744): java.lang.NullPointerException
12-06 17:04:25.418: E/AndroidRuntime(4744):     at com.rbrlnx.lugares.editarLugar$LocListener.onLocationChanged(editarLugar.java:215)

我尝试了不同的代码,但我不可能......

2 个答案:

答案 0 :(得分:0)

您的问题在于您没有分配'posicio'对象。你只是声明它是静态的。因此,当您在onLocationChanged回调中从系统获得回调时,您尝试使用null对象。

在onCreate方法中,您需要使用以下内容分配和初始化posicion:

posicion = new Location();

答案 1 :(得分:0)

这里的posicion变量为null ....初始化它尝试两个

中的任何一个/两个

onCreate()方法中,使用默认值初始化posicion。和/或在必要时使用try / catch在适当的地方调用ObtenPosicion()