Reputation: 3
why I dont know,I take this fault.The program was running before.But now I take this fault.Thank you for help...
MenuActivity.java:
final Context context = this;
private LocationManager mLocationManager;
private String PROVİDER = LocationManager.GPS_PROVIDER;
private GoogleMap googleHarita;
Location mLocation;
public class MenuActivity extends FragmentActivity {
final Context context = this;
private static final int CAMERA_REQUEST = 1888;
TextView e_kor, b_kor, acikAdres;
Fragment harita;
RadarView mRadarView = null;
private LocationManager mLocationManager;
private String PROVİDER = LocationManager.GPS_PROVIDER;
private GoogleMap googleHarita=null;
Location mLocation = null;
TelephonyManager telemamanger;
String getSimSerialNumber;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
// telefon numarası nesnesi
telemamanger = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
e_kor = (TextView) findViewById(R.id.enlmkor);
b_kor = (TextView) findViewById(R.id.bylmkor);
acikAdres = (TextView) findViewById(R.id.acikAdres);
// resim metodu
mRadarView = (RadarView) findViewById(R.id.radarView);
// radar çalıştırma metodları
mRadarView.setShowCircles(true);
mRadarView.startAnimation();
// Konum-lokasyon kodları
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
final Location mLocation = mLocationManager
.getLastKnownLocation(PROVİDER);
if (googleHarita == null) {
googleHarita = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.haritafragment)).getMap();
if (googleHarita != null) {
LatLng koordinat = new LatLng(mLocation.getLatitude(),
mLocation.getLongitude());
googleHarita.addMarker(new MarkerOptions().position(koordinat));
googleHarita.moveCamera(CameraUpdateFactory.newLatLngZoom(
koordinat, 10));
}
}
showLocation(mLocation);
new GetAddressTask().execute(mLocation);
}
// Lokasyon işlemleri
private void showLocation(Location location) {
if (location == null) {
Toast.makeText(getApplicationContext(), "Konum Bulunamadı",
Toast.LENGTH_SHORT).show();
} else {
e_kor.setText(location.getLatitude() + "");
b_kor.setText(location.getLongitude() + "");
}
}
@Override
protected void onPause() {
super.onPause();
mLocationManager.removeUpdates(listener);
}
@Override
protected void onResume() {
super.onResume();
mLocationManager.requestLocationUpdates(PROVİDER, 0, 0, listener);
}
// Konum listener
private LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
showLocation(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
public class GetAddressTask extends AsyncTask<Location, Void, String> {
@Override
protected String doInBackground(Location... locations) {
Geocoder geocoder = new Geocoder(MenuActivity.this);
Location location = locations[0];
List<Address> addresses;
String addrStr = null;
try {
addresses = (List<Address>) geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 5);
Address addr = addresses.get(0);
addrStr = addr.getAddressLine(0) + ", " + addr.getAdminArea()
+ ", " + addr.getCountryName();
} catch (IOException e) {
e.printStackTrace();
}
return addrStr;
}
@Override
protected void onPostExecute(String result) {
acikAdres.setText(result);
}
}
My Log Cat:
11-10 02:20:50.508: E/AndroidRuntime(29376): FATAL EXCEPTION: main
11-10 02:20:50.508: E/AndroidRuntime(29376): Process: com.gpsacilbildirim, PID: 29376
11-10 02:20:50.508: E/AndroidRuntime(29376): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gpsacilbildirim/com.gpsacilbildirim.MainActivity}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gpsacilbildirim/com.gpsacilbildirim.MenuActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
11-10 02:20:50.508: E/AndroidRuntime(29376): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
11-10 02:20:50.508: E/AndroidRuntime(29376): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)
11-10 02:20:50.508: E/AndroidRuntime(29376): at android.app.ActivityThread.access$900(ActivityThread.java:172)
11-10 02:20:50.508: E/AndroidRuntime(29376): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
Upvotes: 0
Views: 11264
Reputation: 1
the getLastKnownLocation() method can and will return null. The main problem is that it doesn't prompt a request to the OS for a new location lock, instead it just checks if there was a last known location from some other app's location request. If no other app had recently made a location request, then you get a null location returned to you.
The only way to guarantee that you actually get a location is to request one, and this is done with a call to requestLocationUpdates().
The location passed into the onLocationChanged() callback method will not be null, since the callback only occurs on a successful location lock.
Upvotes: 0
Reputation: 3162
The exception you're seeing in logcat points to a problem in the onCreate
method of your activity.
The interesting part is this:
java.lang.NullPointerException: Attempt to invoke virtual method 'double android.location.Location.getLatitude()' on a null object reference
. It's telling you that whatever object you're calling getLatitude()
on is null.
Looking at the body of the method, it's only possible on this line: LatLng koordinat = new LatLng(mLocation.getLatitude(), mLocation.getLongitude());
. Therefore you can tell that the crash is caused by mLocation
being null.
You're initializing mLocation
like this: mLocationManager.getLastKnownLocation(PROVİDER);
.
The documentation tells you it's possible to get a null
return value if the provider is disabled.
That should answer the "why". Now you can think about the best way to work around this for your application. Can you try another provider? If none of the providers are enabled, can you default to a generic location? Do you want to show an error message instructing the user to enable location services and provide a way to try again?
Upvotes: 1