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

google map v2 질문좀 하겠습니다.

0 추천

파싱을해서 주변을 검색해서 리스트뷰에 출력을 하고 원하는 장소를 하나 클릭해서 그곳에 이름과 주소, 전화번호, 위도,경도 등을 넘겨서 그 좌표에 마커를 출력하는 프로그램을 작성중인데 화욜까지 작성해야합니다. 정말 급해서 질문을 올려봅니다..ㅠ

//여기는 파싱을해서 나온 결과가 나온 listview에서 아이템을 클릭시 발생하는 이벤트

public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
		String title = items.get(position).getTitle();
		String addr = items.get(position).getAddress();
		String tel = items.get(position).getTel();
		String desc = items.get(position).getDescription();
		String dist = (int) items.get(position).getDistance() + " Km";
		double lat = items.get(position).getLat();
		double lng = items.get(position).getLng();

		// 각각 필드에 제목 주소 전화번호거리 표시
		Intent intent = new Intent(getApplicationContext(), org.androidtown.googlev2.MapActivity.class);
		intent.putExtra("title", title);
		intent.putExtra("addr", addr);
		intent.putExtra("tel", tel);
		intent.putExtra("desc", desc);
		intent.putExtra("dist", dist);
		intent.putExtra("lat", lat);
		intent.putExtra("lng", lng);
		startActivity(intent);
	}

//google mapv2를 띄우는 소스입니다.

public class MapActivity extends FragmentActivity {

	protected GoogleMap gmap;
	ImageButton imagebutton,imagebutton2;
	protected LatLng position;
	protected Intent intent=new Intent();
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	    gmap = ((SupportMapFragment)getSupportFragmentManager().
					findFragmentById(R.id.map)).getMap();
		init();
	}
	protected void onResume(){
		super.onResume();
		init();
	}
	void init()
	{
		if(gmap==null)
		{
			
			gmap = ((SupportMapFragment)getSupportFragmentManager().
					findFragmentById(R.id.map)).getMap(); //액티비티에서 맵을 가져온다.
			if(gmap!=null)
			{
				addMarker();
			}
		}
	}
	void addMarker()
	{
		intent = getIntent();
		double lat = intent.getDoubleExtra("lat", 0);
		double lng = intent.getDoubleExtra("lng", 0);
		String title=intent.getStringExtra("title");
		String addr= intent.getStringExtra("addr");
		String tel= intent.getStringExtra("tel");
		String desc= intent.getStringExtra("desc");
		String dist= intent.getStringExtra("dist");
		position=new LatLng(lat, lng);

		gmap.addMarker(new MarkerOptions().position(position).title(title).snippet(dist+"km").icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));
gmap.moveCamera(CameraUpdateFactory.newLatLng(position));
	}

//혹시 manifest에 에러가 있을꺼 같기도 해서 manifest도올려봅니다.

<uses-sdk android:minSdkVersion="7" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
    <permission android:protectionLevel="signature" android:name="org.androidtown.permission.MAPS_RECEIVE"></permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="org.androidtown.permission.MAPS_RECEIVE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
    
    <application
        android:icon="@drawable/pin" 
        android:label="@string/app_name"
        >
        
        <activity
            android:name="org.androidtown.navermap.MainActivity"
			android:label="위치 검색"
			android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name="org.androidtown.googlev2.MapActivity"></activity>
        <meta-data android:name="com.google.android.maps.v2.API_KEY" 
            android:value="AIzaSyCrRAyIBgkzCgzm0rMGHu8mXbQUZMmVnOY"/>
    </application>

//마지막으로 logcat도 올려봅니다. 마지막줄에 failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).이것이 뜨길래 연결이 안됐나?? 싶어서 연결까지 확인을 했는데도

06-23 23:13:37.233: D/memalloc(11703): ion: Mapped buffer base:0x5c27c000 size:327680 offset:0 fd:77
06-23 23:13:37.283: D/memalloc(11703): ion: Mapped buffer base:0x5c2cc000 size:4096000 offset:0 fd:81
06-23 23:13:37.353: D/memalloc(11703): ion: Mapped buffer base:0x5c7b4000 size:327680 offset:0 fd:84
06-23 23:13:37.843: W/System.err(11703): java.lang.NullPointerException
06-23 23:13:37.843: W/System.err(11703): at org.androidtown.navermap.ItemParser.xmlParser2(ItemParser.java:164)
06-23 23:13:37.853: W/System.err(11703): at org.androidtown.navermap.ItemParser.setLatLong(ItemParser.java:127)
06-23 23:13:37.853: W/System.err(11703): at org.androidtown.navermap.ItemParser.xmlParser(ItemParser.java:109)
06-23 23:13:37.853: W/System.err(11703): at org.androidtown.navermap.MainActivity$2.run(MainActivity.java:196)
06-23 23:13:38.284: D/memalloc(11703): ion: Mapped buffer base:0x5c804000 size:4096000 offset:0 fd:76
06-23 23:13:38.314: D/memalloc(11703): ion: Unmapping buffer  base:0x5c27c000 size:327680
06-23 23:13:38.324: D/memalloc(11703): ion: Unmapping buffer  base:0x5c7b4000 size:327680
06-23 23:13:43.288: I/Adreno200-EGLSUB(11703): <ConfigWindowMatch:2176>: Format RGBX_8888.
06-23 23:13:43.288: D/memalloc(11703): ion: Mapped buffer base:0x5e44a000 size:4096000 offset:0 fd:127
06-23 23:13:43.308: D/memalloc(11703): ion: Mapped buffer base:0x5e832000 size:3788800 offset:0 fd:130
06-23 23:13:43.338: E/(11703): Can't open file for reading
06-23 23:13:43.348: E/(11703): Can't open file for reading
06-23 23:13:43.359: D/memalloc(11703): ion: Unmapping buffer  base:0x5c2cc000 size:4096000
06-23 23:13:43.359: D/memalloc(11703): ion: Unmapping buffer  base:0x5c804000 size:4096000
06-23 23:13:43.529: D/memalloc(11703): ion: Mapped buffer base:0x5c7f7000 size:3788800 offset:0 fd:82
06-23 23:13:43.539: D/memalloc(11703): ion: Mapped buffer base:0x5f13c000 size:3788800 offset:0 fd:88
06-23 23:13:45.471: I/Google Maps Android API(11703): Failed to contact Google servers. Another attempt will be made when connectivity is established.
06-23 23:13:45.821: E/Google Maps Android API(11703): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
//결과입니다..
음 정말 다른 버그는 logcat과 구글링을 이용해서 얼추 잡았는데.. 음.. 도대체 무슨 원인인지 모르겠습니다..ㅠㅠ
awdsza (120 포인트) 님이 2013년 6월 23일 질문

2개의 답변

0 추천
1. 데이터 넘길때 저렇게 일일이 하지마시고 클래스하나만드시고 그거 넘기시는게 나으실듯..

2. 위도경도값이 못받을경우 디폴트로 0,0이신데... 위도경도가 0 0 인곳 존재합니다.. 저렇게하면 엉뚱한대 잡힐가능성 있음

-1 -1 로 하시고 적절하게 에러처리하세요

3. 제가보기에는 맵뷰문제가 아니고 데이터값이 비어서 생긴 문제일거 같은데요 저기 보시면 널포인트익셉션 일어나에요

데이터 출력이 정상인지 보시고 넘기는것더 잘넘어가는지 체크해보세요
건방진프로그래머 (26,630 포인트) 님이 2013년 6월 24일 답변
글 잘봤습니다. 3번은 제가 무슨말인지 몰라서 그냥 변수들을 전부 위로 올려서 private로 선언해서 oncreate에서 전부 변수를 가져왔더니 변수가 가져온것을 확인했는데 2번은 예외처리를 이용해서 하라는 말인가요??
우선 출력된 logcat입니다
06-24 18:12:49.565: D/dalvikvm(6594): GC_CONCURRENT freed 304K, 7% free 13162K/14023K, paused 12ms+12ms, total 49ms
06-24 18:12:49.780: D/dalvikvm(6594): GC_CONCURRENT freed 364K, 7% free 13363K/14279K, paused 13ms+2ms, total 36ms
06-24 18:12:49.780: D/dalvikvm(6594): WAIT_FOR_CONCURRENT_GC blocked 6ms
06-24 18:12:49.780: D/dalvikvm(6594): WAIT_FOR_CONCURRENT_GC blocked 6ms
06-24 18:12:49.780: D/dalvikvm(6594): WAIT_FOR_CONCURRENT_GC blocked 7ms
06-24 18:12:49.920: D/AbsListView(6594): Get MotionRecognitionManager
06-24 18:12:49.935: D/dalvikvm(6594): GC_CONCURRENT freed 254K, 6% free 13664K/14471K, paused 14ms+3ms, total 38ms
06-24 18:12:49.935: D/dalvikvm(6594): WAIT_FOR_CONCURRENT_GC blocked 8ms
06-24 18:12:49.995: D/dalvikvm(6594): GC_FOR_ALLOC freed 42K, 6% free 13887K/14663K, paused 28ms, total 28ms
06-24 18:12:50.030: D/dalvikvm(6594): GC_FOR_ALLOC freed 10K, 6% free 14024K/14855K, paused 31ms, total 32ms
06-24 18:12:50.060: D/dalvikvm(6594): GC_FOR_ALLOC freed 142K, 7% free 14130K/15111K, paused 27ms, total 28ms
06-24 18:12:50.095: D/dalvikvm(6594): GC_FOR_ALLOC freed 158K, 7% free 14378K/15367K, paused 15ms, total 16ms
06-24 18:12:50.120: D/dalvikvm(6594): GC_FOR_ALLOC freed 140K, 7% free 14621K/15623K, paused 17ms, total 17ms
06-24 18:12:50.130: I/MapActivity(6594): 20 Km
06-24 18:12:50.130: I/MapActivity(6594): 35.22959899902344
06-24 18:12:50.130: I/MapActivity(6594): 128.68165588378906
06-24 18:12:50.285: D/libEGL(6594): loaded /system/lib/egl/libEGL_mali.so
06-24 18:12:50.290: D/libEGL(6594): loaded /system/lib/egl/libGLESv1_CM_mali.so
06-24 18:12:50.295: D/libEGL(6594): loaded /system/lib/egl/libGLESv2_mali.so
06-24 18:12:50.300: D/(6594): Device driver API match
06-24 18:12:50.300: D/(6594): Device driver API version: 10
06-24 18:12:50.300: D/(6594): User space API version: 10
06-24 18:12:50.300: D/(6594): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Fri Oct 12 13:25:41 KST 2012
06-24 18:12:50.385: D/dalvikvm(6594): GC_CONCURRENT freed 392K, 7% free 14978K/15943K, paused 13ms+3ms, total 37ms
06-24 18:12:50.385: D/dalvikvm(6594): WAIT_FOR_CONCURRENT_GC blocked 14ms
06-24 18:12:50.435: D/dalvikvm(6594): GC_FOR_ALLOC freed 1135K, 12% free 14506K/16391K, paused 28ms, total 28ms
06-24 18:12:50.475: E/SpannableStringBuilder(6594): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
06-24 18:12:50.475: E/SpannableStringBuilder(6594): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
06-24 18:12:50.490: D/dalvikvm(6594): GC_CONCURRENT freed 538K, 11% free 14665K/16391K, paused 12ms+2ms, total 35ms
06-24 18:12:50.490: D/dalvikvm(6594): WAIT_FOR_CONCURRENT_GC blocked 18ms
06-24 18:12:50.560: I/Google Maps Android API(6594): Failed to contact Google servers. Another attempt will be made when connectivity is established.
06-24 18:12:50.905: E/Google Maps Android API(6594): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
06-24 18:12:56.815: D/dalvikvm(6594): GC_CONCURRENT freed 810K, 12% free 14555K/16391K, paused 4ms+5ms, total 42ms
2번이야기는요 님이 짜신 소스를 보세요
저기 보시면 위도경도값이 없을때 디폴트로 0을 가져오시죠?
근데 실제적으로 위도경도0인 지역이 존재한다는거죠 자칫잘못해서
위도경도값을 못받는다면... 엉뚱한곳이 지도로 나오게죠 그래서 적절하게 예외처리하라는거죠 -1값으로
0 추천
디바이스에 생성된 app 지우고 다시 디버깅 해서 확인해보세요 저는 맵뜨는부분 그걸로 해결됬습니다
구기웅 (1,110 포인트) 님이 2013년 8월 21일 답변
...