2017-01-31 1 views
0

Ich versuche eine App zu erstellen, die den aktuellen Standort des Geräts abruft. Aber es wirft nullPointException auf: - lat.setText (location.getLatitude() + ""); als Standortobjekt ist immer Null. Bitte beheben Sie dieses Problem den folgenden Code in getestet Android-7.1.1NULLPUNKT-Ausnahme beim Aufrufen des Standorts in Android N.

package in.technomenia.user.test; 

import android.Manifest; 
import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationManager; 
import android.os.Build; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    LocationManager locationManager; 
    Location location; 
    TextView lat, lng; 
    Button getlocation; 
    private boolean permission_granted = false; 

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

     lat = (TextView) findViewById(R.id.lati); 
     lng = (TextView) findViewById(R.id.longi); 
     getlocation = (Button) findViewById(R.id.get_latlng); 


     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     locations(); 

    } 

    public void locations() { 
     Toast.makeText(getApplicationContext(), "permissions-> "+permission_granted, Toast.LENGTH_SHORT).show(); 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 
        if (permission_granted == false) { 
         requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 19); 
         Toast.makeText(getApplicationContext(), "Requires GPS Permission", Toast.LENGTH_SHORT).show(); 
        }else{ 
         if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) 
          location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         else 
          Toast.makeText(getApplicationContext(), "Enable Locaion", Toast.LENGTH_SHORT).show(); 
        } 
       } 

      } else { 
       permission_granted= true; 
       Toast.makeText(getApplicationContext(), "less than android m", Toast.LENGTH_SHORT).show(); 

      } 



     getlocation.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 



       if (permission_granted == true) { 
        Toast.makeText(getApplicationContext(), "permission granted", Toast.LENGTH_SHORT).show(); 
        lat.setText(location.getLatitude()+""); 
        lng.setText(location.getLongitude()+""); 
       } 

      } 
     }); 

    } 




    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if(requestCode ==19){ 
      if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ 
       permission_granted = true; 
       locations(); 

      }else{ 
       permission_granted= false; 

      } 
     } 
    } 
} 
+0

http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how -do-i-fix-it –

+0

Hallo Herr, ich habe das Standortobjekt in der folgenden Zeile initialisiert: - location = locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER); aber dann bleibt es auch null. –

+0

können Sie den Fehlercode aus logcat hinzufügen? – W4R10CK

Antwort

1

Die getLastKnownLocation() Methode gibt den Ort Wert gesammelt, nachdem Sie die requestLocationUpdates() Methode aufrufen. Wenn Sie versuchen, den letzten Standort ohne Anforderung einer Standortaktualisierung zu erhalten, lautet die Rückmeldung immer null.

Siehe this für Implementierungsbeispiel
this Sehen Sie, wenn Sie Ihren Standort noch null nach dem Standort-Aktualisierungsanforderung liefert

+0

Vielen Dank Sir für Ihre Unterstützung, aber es funktioniert gut in Lollypop ohne Aufruf von requestLocationUpdates(). Warum funktioniert es dann nicht unter Android-N? –

+0

? Bei der checkSelfPermission() -Methode verifizieren Sie FINE- und COARSE-Berechtigungen, aber auf den requestPermissions fragen Sie nur nach FINE. Versuchen Sie Folgendes zu verwenden: {Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_LOCATION_REQUEST_CODE); –

+0

Danke, es hat funktioniert –

Verwandte Themen