Android - Holen Sie sich GPS-Koordinaten und Lage
Ich versuche, eine Anwendung zu entwickeln, zu verfolgen, die GPS-Daten vom User. Wenn ich die Längen-und Breitengrad ich wollen, konvertieren Sie diese in ein Lage. (Das ist die Arbeit mit statischen Daten wie Sie sehen können in meinem code)
Mein problem ist, die Variablen aus Längen-und Breitengrad in das JSON-request - geocode/json?latlng=42.774955,18.955061",
Am Ende sollte es bleiben "...geocode/json?latlng"+lat+","+lng+...
Jedes mal, wenn ich das bekomme ich NULL Werte. Bitte helfen Sie mir.
public class MatchActivity extends AppCompatActivity {
private Button button;
private TextView textView;
private TextView textViewCity;
private LocationManager locationManager;
private LocationListener locationListener;
private RequestQueue requestQueue;
private double lat;
private double lng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_match);
button = (Button) findViewById(R.id.button_location);
textView = (TextView) findViewById(R.id.textView_Coordinates);
textViewCity = (TextView) findViewById(R.id.textCity);
requestQueue = Volley.newRequestQueue(this);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new myLocationlistener();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Location location = new Location("");
lng = location.getLongitude();
lat = location.getLatitude();
Log.e("Latitude", String.valueOf(lat));
Log.e("Longitude", String.valueOf(lng));
JsonObjectRequest request = new JsonObjectRequest("https://maps.googleapis.com/maps/api/geocode/json?latlng=42.774955,18.955061", new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String address = response.getJSONArray("results").getJSONObject(0).getString("formatted_address");
textViewCity.setText(address);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
requestQueue.add(request);
}
});
}
private class myLocationlistener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
if(location != null){
lat = location.getLatitude();
lng = location.getLongitude();
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
- Sie erstellen eine neue
Location
- Objekt und verwenden es werden die Koordinaten, anstatt dielat
undlng
Werte in denonLocationChanged(...)
Rückruf. - Okay, aber ich bereits ein neues Location-Objekt
Location location = new Location("");
@Titus - Ja, das ist das problem, sollten Sie die Werte, die gesetzt werden, wenn der Speicherort geändert wird.
- Aber das wird nicht funktionieren, wenn ich es so
lng = myLocationlistener(new myLocationlistener(lng));
- Wenn sich die Lage ändert, werden die
lng
undlat
Wert wird festgelegt, indem dieonLocationChanged(...)
Methode. In deronClick(...)
Sie nicht benötigen, um diese Werte, Sie brauchen nur zu überprüfen, wenn Sie wurden bereits festgelegt. - Aber ich brauche die Länge und Breite für das JSON-request, um die tatsächliche Lage.
- Ja, ich weiß, nehmen Sie einen Blick um zu sehen, wie
LocationListener
funktioniert und ich denke, Sie werden verstehen, was ich zu sagen versuche. Grundsätzlich sind die Instanz-Variablenlat
undlng
gesetzt werden, wenn der Speicherort geändert wird. - Jetzt seine Arbeit, ich danke Ihnen sehr! 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie immer
null
Werte für IhreLocation
Objekt, weil Sie Initialisierung eines Objekts jedes mal, wenn dieButton
geklickt wird, und um die Werte des Objekts. Wenn einLocation
- Objekt erstellt wird, hat es keine Eigenschaften, es sei denn, Sie setzen Sie mitlocation.setLatitude()
oderlocation.setLongitude()
. Um Ihr problem zu lösen, entfernen Sie einfach die Zeilen:Wenn Ihr die Koordinaten zu protokollieren, werden Sie nicht bekommen eine
null
Wert, da Sie Ihnen in IhremonLocationChanged()
Zuhörer. Sie sollten auch hinzufügen, das eine erste überprüfung inonCreate()
zu prüfen, die Lage.Nachdem Sie dies getan haben, sollten Sie in der Lage zu schreiben
"https://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng"
für dieString
Sie auf der Durchreise sind SieJSONObjectRequest
.