2017-11-15 1 views
0

"위치 저장"버튼을 누르면 현재 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); 
    } 
} 

내가 가정 메모 활동에서지도 활동으로 다시 전환 할 때 주 활동에서 데이터를 가져 오려고 할 때 데이터가 null이기 때문에 충돌이 발생합니다. 지도 활동에서 getExtras() 호출을 제거하면 앱이 제대로 실행됩니다.

어떻게이 문제를 해결할 수 있습니까?

참고 :이 앱에 더 많은 스크린을 추가 할 예정이므로 메모 활동에서 finish()를 사용하지 마십시오.이를 사용하면 원치 않는 동작 (예 : 잘못된 활동으로 되돌아 감)으로 끝날 수 있습니다.

+2

주 인한 귀하의 충돌 로그 – Prem

+0

모니터 상태 "의 값을 초기화하는 것을 잊었다 아닌 mapsactivity 이를 사용하여 간단 조건을 넣어야 할 by : java.lang.NullPointerException : null 객체 참조에 가상 메소드 'double android.os.BaseBundle.getDouble (java.lang.String)'을 호출하려고 시도했습니다. 이것이 아닌 경우 사과드립니다. 당신은 찾고 있었어 – banksters

+2

메모 활동에서 뒤로 탐색 할 때 위도와 경도가 널이어서 이중으로 변환 할 수 없거나 메모 활동으로 전달하거나 다시 묶음으로 전달하거나 맵 활동 및 변수에서 변수에 저장하면 되돌릴 수 있습니다 null의 경우 – Zaki

답변

0

당신은

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

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

그냥

private Double latitude=123.45; 
private Double longitude=123.45; 
관련 문제