如何将 currentLocation ActivityOne 传递给 ActivityTwo?
How to pass currentLocation ActivityOne to ActivityTwo?
我正在尝试将 currentLocation 从 ActivityOne 传递到 ActivityTwo,但它传递了空值。
在我的 activity 中,如果用户已经登录,它将重定向到另一个 activity。
private void nextActivity(){
Intent main = new Intent(FirstActivity.this, ListActivity.class);
main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
main.putExtra("Lat", latitude); //String
main.putExtra("Long",longitude); //String
startActivity(main);
}
这是获取用户位置的代码。我在数据为空和数据不为空的地方添加了一些注释。
private void checkLocationPermission(){
try{
if(ActivityCompat.checkSelfPermission(this, mPermission)
!= MockPackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[] {mPermission}, REQUEST_CODE_PERMISSION);
}else {
inBuildGoogleApiClient();
}
} catch(Exception e){
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == REQUEST_CODE_PERMISSION){
if(grantResults.length == 1 && grantResults[0] == MockPackageManager.PERMISSION_GRANTED){
inBuildGoogleApiClient();
}else{
Log.d("ON REQUEST PERMISSION", "FAILED");
}
}
}
@Override
public void onConnected(Bundle bundle){
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(10000);
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED){
Log.d("ONCONNECTION", "FAILED");
return;
}else{
Log.d("ONCONNECTION", "PASS");
}
LocationServices.FusedLocationApi.requestLocationUpdates(client, locationRequest, this);
lastLocation = LocationServices.FusedLocationApi.getLastLocation(client);
if(lastLocation != null){
latitude = String.valueOf(lastLocation.getLatitude());
longitude = String.valueOf(lastLocation.getLongitude());
Log.d("Latitude", "" + latitude);
Log.d("Longtiude", "" + longitude);
}
updateUI();
}
@Override
public void onConnectionSuspended(int i){
}
@Override
public void onLocationChanged(Location location){
latitude = String.valueOf(location.getLatitude());
longitude = String.valueOf(location.getLongitude());
Log.d("Latitude", "" + latitude);
Log.d("Longitude", "" + longitude);
updateUI();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult){
inBuildGoogleApiClient();
}
synchronized void inBuildGoogleApiClient(){
client = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).
addOnConnectionFailedListener(this).addApi(LocationServices.API).build();
}
@Override
protected void onResume() {
if(AccessToken.getCurrentAccessToken() != null){
checkLocationPermission();
Log.d("TEST TEST", "" + latitude); // RETURNS NULL
nextActivity();
}
if(client != null){
client.connect();
}
super.onResume();
}
@Override
protected void onDestroy(){
super.onDestroy();
if(client != null){
client.disconnect();
}
}
void updateUI(){
Log.d("LOCATION L", "" + latitude ); // SHOWS THE RIGHT LAT
Log.d("LOCATION LON", "" + longitude); //SHOWS THE RIGHT LON
}
@Override
protected void onPause() {
super.onPause();
}
有谁知道我该如何解决这个问题?谢谢
这里再次调用 nextActivity
@Override
public void onLocationChanged(Location location){
latitude = String.valueOf(location.getLatitude());
longitude = String.valueOf(location.getLongitude());
Log.d("Latitude", "" + latitude);
Log.d("Longitude", "" + longitude);
updateUI();
nextActivity();
}
我正在尝试将 currentLocation 从 ActivityOne 传递到 ActivityTwo,但它传递了空值。
在我的 activity 中,如果用户已经登录,它将重定向到另一个 activity。
private void nextActivity(){
Intent main = new Intent(FirstActivity.this, ListActivity.class);
main.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
main.putExtra("Lat", latitude); //String
main.putExtra("Long",longitude); //String
startActivity(main);
}
这是获取用户位置的代码。我在数据为空和数据不为空的地方添加了一些注释。
private void checkLocationPermission(){
try{
if(ActivityCompat.checkSelfPermission(this, mPermission)
!= MockPackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[] {mPermission}, REQUEST_CODE_PERMISSION);
}else {
inBuildGoogleApiClient();
}
} catch(Exception e){
e.printStackTrace();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == REQUEST_CODE_PERMISSION){
if(grantResults.length == 1 && grantResults[0] == MockPackageManager.PERMISSION_GRANTED){
inBuildGoogleApiClient();
}else{
Log.d("ON REQUEST PERMISSION", "FAILED");
}
}
}
@Override
public void onConnected(Bundle bundle){
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(10000);
if(ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) !=
PackageManager.PERMISSION_GRANTED){
Log.d("ONCONNECTION", "FAILED");
return;
}else{
Log.d("ONCONNECTION", "PASS");
}
LocationServices.FusedLocationApi.requestLocationUpdates(client, locationRequest, this);
lastLocation = LocationServices.FusedLocationApi.getLastLocation(client);
if(lastLocation != null){
latitude = String.valueOf(lastLocation.getLatitude());
longitude = String.valueOf(lastLocation.getLongitude());
Log.d("Latitude", "" + latitude);
Log.d("Longtiude", "" + longitude);
}
updateUI();
}
@Override
public void onConnectionSuspended(int i){
}
@Override
public void onLocationChanged(Location location){
latitude = String.valueOf(location.getLatitude());
longitude = String.valueOf(location.getLongitude());
Log.d("Latitude", "" + latitude);
Log.d("Longitude", "" + longitude);
updateUI();
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult){
inBuildGoogleApiClient();
}
synchronized void inBuildGoogleApiClient(){
client = new GoogleApiClient.Builder(this).addConnectionCallbacks(this).
addOnConnectionFailedListener(this).addApi(LocationServices.API).build();
}
@Override
protected void onResume() {
if(AccessToken.getCurrentAccessToken() != null){
checkLocationPermission();
Log.d("TEST TEST", "" + latitude); // RETURNS NULL
nextActivity();
}
if(client != null){
client.connect();
}
super.onResume();
}
@Override
protected void onDestroy(){
super.onDestroy();
if(client != null){
client.disconnect();
}
}
void updateUI(){
Log.d("LOCATION L", "" + latitude ); // SHOWS THE RIGHT LAT
Log.d("LOCATION LON", "" + longitude); //SHOWS THE RIGHT LON
}
@Override
protected void onPause() {
super.onPause();
}
有谁知道我该如何解决这个问题?谢谢
这里再次调用 nextActivity
@Override
public void onLocationChanged(Location location){
latitude = String.valueOf(location.getLatitude());
longitude = String.valueOf(location.getLongitude());
Log.d("Latitude", "" + latitude);
Log.d("Longitude", "" + longitude);
updateUI();
nextActivity();
}