마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안녕하십니까 ㅜㅜ 일주일동안 별거 아닌거같은데 intent로 개고생하고잇는 초짜 개발자입니다ㅜㅜ

0 추천
우선 제가 하고자 하는 목표를 알려드리겠습니다

일단 먼저 내가 고른 버스정류장의 위도와 경로, 정류소명을 받아오고 이것의 좌표를 구글맵으로 연동하여 좌표를 찍는일까지 하고자 합니다. 정말 별거아니고 쉬운거같은데 왜 자꾸 안되는걸까요?

정말 별의 별 수를 다 짜보았습니다. 생성자로 만들어서 객체로 넘겨보기도 하고 인텐트 바뀔때 데이터로 넘겨주기도 하고 정말 수없이 시도해보았는데 결국 되지가 않네요. 진짜 부탁드립니다. 무엇이 문제인지를 제발 알려주시면 감사드리겠습니다ㅜㅜ 인생의 은인이 될거같아요....고구마 먹은듯이 답답해요.

정류소명과 좌표받아오는건 문제가 전혀 없습니다! 오직 연동하는 부분에서 앱이 꺼지는 오류가 발생하는 것입니다 ㅜㅜㅜ

 

저희 코드를 보여드릴게요.

------------------구글맵과 연동시킬 클래스----------------------

public class MapLocation extends AppCompatActivity implements OnMapReadyCallback {
    private GoogleMap gMap;
    Intent intent = this.getIntent();
    double currLatitude=intent.getDoubleExtra("lat",-1);
    double currLongitude=intent.getDoubleExtra("lon",-1);
    String string="";
    LatLng place;

    public MapLocation(){
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        place = new LatLng(currLatitude, currLongitude);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }
     @Override
    public void onMapReady(GoogleMap googleMap) {
        gMap = googleMap;
         gMap.getUiSettings().setZoomControlsEnabled(true);
         gMap.getUiSettings().setCompassEnabled(true);
         gMap.getUiSettings().setMapToolbarEnabled(true);

         // LatLng : 위도 경도 잡아주는 객체
      //   LatLng place = new LatLng(currLatitude, currLongitude);

         // 쥐잉~ 하면서 카메라 줌
         // 20 : 확대하는 정도
         CameraPosition cameraPosition = new CameraPosition.Builder().target(place).zoom(15).build();

         gMap.animateCamera(CameraUpdateFactory.newCameraPosition((cameraPosition)));

         // 좌표에 Marker가 꽂히게
         gMap.addMarker(new MarkerOptions().position(place).title("검색한 정류소"));
         gMap.addMarker(new MarkerOptions().position(place).snippet(string));

         // 마커 클릭시 행동
         gMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
             @Override
             public boolean onMarkerClick(Marker marker) {
                 Toast.makeText(MapLocation.this, marker.getSnippet(), Toast.LENGTH_SHORT).show();
                 return false;
             }
         });
         Toast.makeText(this, "lat: " + currLatitude + ", lon: " + currLongitude, Toast.LENGTH_SHORT).show();
         if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
             // TODO: Consider calling
             //    ActivityCompat#requestPermissions
             // here to request the missing permissions, and then overriding
             //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
             //                                          int[] grantResults)
             // to handle the case where the user grants the permission. See the documentation
             // for ActivityCompat#requestPermissions for more details.
             return;
         }
         gMap.setMyLocationEnabled(true);
    }
}

-----------------버튼과 이벤트 처리할 코드 --------------

 

        //버스 위치 지도 확인
        busBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // do something when the button is clicked
                double d1=Double.valueOf(currentStation.getGpsX()).doubleValue();
                double d2=Double.valueOf(currentStation.getGpsY()).doubleValue();
                Toast.makeText(getApplicationContext(), "d1="+ map.currLatitude, Toast.LENGTH_SHORT).show();
               //map=new MapLocation(d1,d2,currentStation.getStNm());
                Intent intent1 = new Intent(getApplicationContext(), MapLocation.class);
                intent1.putExtra("lat", d1);
                intent1.putExtra("lon", d2); // intent1.putExtra("stnName", currentStation.getStNm());
                 startActivity(intent1);
               // Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:"+d1+","+d2));
               // intent1.setPackage("com.google.android.apps.maps");
               // startActivity(intent1);
            }
        });

처음엔 MapLocation의 생성자로 인자를 받아서 집어넣는걸로 했엇는데

그때는 지도가 켜지긴했었지만 초기값이 전혀 바뀌지 않아서 애먹었는데

이렇게 인텐트 값으로 넘겨주려는 코드로 바꾸니까 이젠 아예 지도가 켜지지도 않고 앱이 꺼지고 마네요 ㅜㅜ

진짜 너무 힘이듭니다. 제가 초짜라서 헤매는건당연한데 답을 구할 길이 없어서 답답합니다ㅜㅜ
익명사용자 님이 2017년 8월 31일 질문
에러 로그도 올리세요       .
에러가 뜨지는않습니다....빌드는다 되는데 앱이 중간에 꺼지는 문제라서요ㅜㅜ
그니까 앱이 꺼질때의 에러 메시지를...

1개의 답변

0 추천
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'double android.content.Intent.getDoubleExtra(java.lang.String, double)' on a null object reference
                                                                            at com.example.sy.bus_alime.MapLocation.<init>(MapLocation.java:22)
                                                                            at java.lang.reflect.Constructor.newInstance(Native Method)

 

이렇게 뜹니다!!!
고이소 (160 포인트) 님이 2017년 9월 4일 답변
null 에다가 getDoubleExtra() 를 호출해서 발생한다네요.
...