2016-05-03 6 views
0

Jedes Mal, wenn ich diese laufen, bekomme ich diese Fehlermeldung „java.lang.IllegalStateException: Systemdienste nicht zur Verfügung Aktivitäten vor onCreate()“Erste Benutzer Geo Location API 23

Ich brauche die Benutzer zu erhalten Länge und Breitengrad, damit ich es für den Rest meiner App verwenden kann, aber ich kann nicht herausfinden, wie man über diesen Fehler hinauskommt.

public class map extends FragmentActivity implements OnMapReadyCallback { 

private GoogleMap mMap; 
private FloatingActionButton plus; 
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
double longitude = location.getLongitude(); 
double latitude = location.getLatitude(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_map); 

    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 

    plus = (FloatingActionButton) findViewById(R.id.newPlace); 

    plus.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(map.this, newPlacePop.class)); 
     } 
    }); 
} 



@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    LatLng currentPosition = new LatLng(latitude, longitude); 

    float zoomLevel = 16; //This goes up to 21 
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentPosition, zoomLevel)); 

} 

}

Antwort

1
java.lang.IllegalStateException: System services not available to Activities before onCreate() 

Sie haben ein Feldinitialisierer die getSystemService() ruft:

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

Sie nicht anrufen können getSystemService() — oder die meisten anderen Methoden, die Sie von Activity — vor der Vererbungs Rufen Sie an super.onCreate() in Ihrem onCreate() meth od.

So ändern:

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
double longitude = location.getLongitude(); 
double latitude = location.getLatitude(); 

zu:

LocationManager lm; 
Location location; 
double longitude; 
double latitude; 

und fügen Sie die folgenden Zeilen nach super.onCreate() in Ihrem onCreate() Methode:

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

if (location==null) { 
    // do something 
} 
else { 
    longitude = location.getLongitude(); 
    latitude = location.getLatitude(); 
} 

Ich brauche das bekommen Benutzer Länge und Breite, damit ich kann es für den Rest meiner App verwenden

Ihr Code ist unwahrscheinlich, den Breiten- und Längengrad zu erhalten. getLastKnownLocation() gibt häufig null zurück, und Sie würden mit einem NullPointerException ohne den if in dem Code, der oben gezeigt wird, abstürzen. Vielleicht möchten Sie the documentation on getting location data lesen.

Auch Sie erwähnen "API 23". Wenn Ihr targetSdkVersion 23 oder höher ist, benötigen Sie the code to request your location permission at runtime.

Verwandte Themen