当我从地图活动切换到另一个活动,然后回到地图活动

时间:2017-11-15 11:31:22

标签: android android-activity

我有一个小应用程序,当按下“保存位置”按钮时,它会以纬度和经度接收您当前的GPS坐标。启动另一个活动,显示地图并标记当前位置。在此地图活动中,您可以按一个按钮转到另一个活动(让我们称之为备忘录活动),其中有一个按钮可以将您带回地图活动。但是,按下此按钮会使应用程序崩溃,从而返回到地图活动。

以下是主要活动,地图活动和备忘录活动的代码。

主要活动

public class HomeScreen extends AppCompatActivity {

private Button button;
private TextView textView;
private LocationManager locationManager;
private LocationListener locationListener;
private double longitude;
private double latitude;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.homescreen);
    button = (Button) findViewById(R.id.button);
}

public void saveAndGo(View view) {
    GPStracker g = new GPStracker(getApplicationContext());
    Location l = g.getLocation();
    if (l != null)
    {
        longitude =  l.getLongitude();
        latitude  =  l.getLatitude();
    }

    Intent go = new Intent(this, MapsActivity.class);
    go.putExtra("longitude", longitude);
    go.putExtra("latitude", latitude);
    startActivity(go);
    finish();
}

地图活动

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
private Double latitude;
private Double longitude;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // 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);

        latitude = getIntent().getExtras().getDouble("latitude");
        longitude = getIntent().getExtras().getDouble("longitude");
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    LatLng pos = new LatLng(latitude, longitude);
    mMap.addMarker(new MarkerOptions().position(pos).title("Your Location"));
    mMap.setMinZoomPreference(16.0f);
    mMap.setMaxZoomPreference(20.0f);
    mMap.setMyLocationEnabled(true);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(pos));
}

public void goMemos (View view) {
    Intent go = new Intent(this, MemoScreen.class);
    startActivity(go);
}

备忘录活动

public class MemoScreen extends AppCompatActivity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.memoscreen);
    }

    public void goMap (View view){
        Intent go = new Intent(this, MapsActivity.class);
        startActivity(go);
    }
}

我认为它崩溃了,因为当我从备忘录活动切换回地图活动时尝试从主要活动获取数据时,数据为空。如果我从地图活动中删除了getExtras()调用,该应用程序运行正常。

我该如何解决这个问题?

注意:我想避免在备忘录活动中使用finish(),因为我计划向此应用添加更多屏幕,因此使用它可能会导致不良行为(即返回错误的活动)。 / p>

1 个答案:

答案 0 :(得分:0)

你必须把简单的条件

 if(getIntent().getExtras() != null){

    latitude = getIntent().getExtras().getDouble("latitude");
    longitude = getIntent().getExtras().getDouble("longitude");
 }

在mapactivity中使用它 并且不要忘记初始化

的值
private Double latitude=123.45;   
private Double longitude=123.45;