2014-04-06 2 views
2

내 코드가 잘못되었습니다. 나는지도/위치 응용 프로그램을하고있다. 지도를 표시하는 것은 괜찮지 만 setUpMap() 메소드/함수를 추가하려고하면 앱이 중지됩니다.Google Map api v2 - setUpMap() 오류가 발생합니다.

main_layout.xml :

<?xml version="1.0" encoding="utf-8"?> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:name="com.google.android.gms.maps.MapFragment"/> 

활동 :

패키지 tri.mylocapp;

//import... 

public class MainActivity extends Activity implements LocationListener{ 

    GoogleMap googlemap = null; 
    LatLng latlng; 
    LocationManager lm; 
    String provider; 
    Location location; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (isGooglePlay()){ 
     setContentView(R.layout.activity_main); 
     setUpMap(); 
     } 

    } 

    private boolean isGooglePlay(){ 
     int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
     if (status == ConnectionResult.SUCCESS){ 
      Log.d("mytag", "google ok"); 
      return true; 
     } 
     else{ 
      Log.d("mytag","google not ok"); 
      Toast.makeText(this, "GooglePlay is not available", Toast.LENGTH_SHORT).show(); 
     } 
     return false; 
    } 

    private void setUpMap(){ 
     if (googlemap == null){ 
      Log.d("mytag", "googlemap is null, making it available"); 
      googlemap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap(); 

      if (googlemap != null){ 
       Log.d("mytag", "googlemap is not null"); 
       googlemap.setMyLocationEnabled(true); 
       provider = lm.getBestProvider(new Criteria(), true); 

       if (provider == null){ 
        onProviderDisabled(provider); 
       } 
       location = lm.getLastKnownLocation(provider); 
       if (location != null){ 
        onLocationChanged(location); 
       } 
      } 
     } 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     latlng = new LatLng(location.getLatitude(), location.getLongitude()); 
     googlemap.moveCamera(CameraUpdateFactory.newLatLng(latlng)); 
     googlemap.animateCamera(CameraUpdateFactory.zoomTo(10)); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 
} 

로그 캣 (오류 및 mytag가) : 당신은 아무것도에 그 값을 비교하기 전에

04-06 12:54:13.099: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:54:13.099: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:54:13.103: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:54:13.103: E/SocketStream(342): readFully was waiting for 255984 bytes, got 4 
04-06 12:54:13.103: E/SocketStream(342): readFully was waiting for 255980 bytes, got 49152 
04-06 12:54:13.103: E/SocketStream(342): readFully was waiting for 206828 bytes, got 49152 
04-06 12:54:13.103: E/SocketStream(342): readFully was waiting for 157676 bytes, got 49152 
04-06 12:54:13.103: E/SocketStream(342): readFully was waiting for 108524 bytes, got 16384 
04-06 12:54:13.255: E/Trace(1750): error opening trace file: No such file or directory (2) 
04-06 12:54:20.723: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:54:20.723: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:54:20.723: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:54:20.723: E/SocketStream(342): readFully was waiting for 255984 bytes, got 16384 
04-06 12:54:37.215: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:54:37.215: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:54:37.215: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:54:37.215: E/SocketStream(342): readFully was waiting for 255984 bytes, got 16384 
04-06 12:54:39.579: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:54:39.579: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:54:39.579: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:54:39.579: E/SocketStream(342): readFully was waiting for 255984 bytes, got 16384 
04-06 12:54:39.599: E/Trace(1769): error opening trace file: No such file or directory (2) 
04-06 12:54:39.607: E/jdwp(1769): Failed sending reply to debugger: Broken pipe 
04-06 12:54:41.403: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:54:41.403: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:54:41.403: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:54:41.403: E/SocketStream(342): readFully was waiting for 255984 bytes, got 16384 
04-06 12:54:41.679: E/BinaryDictionaryGetter(531): Could not find a dictionary pack 
04-06 12:54:41.679: E/ActivityThread(531): Failed to find provider info for com.android.inputmethod.latin.dictionarypack 
04-06 12:54:41.711: E/dalvikvm(1633): Could not find class 'android.app.AppOpsManager', referenced from method box.a 
04-06 12:54:43.767: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:54:43.767: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:54:43.767: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:54:43.767: E/SocketStream(342): readFully was waiting for 255984 bytes, got 16384 
04-06 12:55:57.495: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:55:57.495: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:55:57.499: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:55:57.499: E/SocketStream(342): readFully was waiting for 255984 bytes, got 16384 
04-06 12:55:57.531: E/Trace(1841): error opening trace file: No such file or directory (2) 
04-06 12:55:57.827: E/AndroidRuntime(1841): FATAL EXCEPTION: main 
04-06 12:55:57.827: E/AndroidRuntime(1841): java.lang.RuntimeException: Unable to start activity ComponentInfo{tri.mylocapp/tri.mylocapp.MainActivity}: java.lang.NullPointerException 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.os.Looper.loop(Looper.java:137) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at dalvik.system.NativeStart.main(Native Method) 
04-06 12:55:57.827: E/AndroidRuntime(1841): Caused by: java.lang.NullPointerException 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at tri.mylocapp.MainActivity.setUpMap(MainActivity.java:61) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at tri.mylocapp.MainActivity.onCreate(MainActivity.java:35) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.Activity.performCreate(Activity.java:5008) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
04-06 12:55:57.827: E/AndroidRuntime(1841):  ... 11 more 
04-06 12:55:57.859: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 12:55:57.859: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 12:55:57.859: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 12:55:57.859: E/SocketStream(342): readFully was waiting for 255984 bytes, got 49152 
04-06 12:55:57.859: E/SocketStream(342): readFully was waiting for 206832 bytes, got 49152 
04-06 13:13:01.315: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 13:13:01.315: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 13:13:01.315: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 13:13:01.315: E/SocketStream(342): readFully was waiting for 255984 bytes, got 16384 
04-06 13:13:01.363: E/Trace(1874): error opening trace file: No such file or directory (2) 
04-06 13:13:01.375: E/jdwp(1874): Failed sending reply to debugger: Broken pipe 
04-06 13:13:01.643: E/AndroidRuntime(1874): FATAL EXCEPTION: main 
04-06 13:13:01.643: E/AndroidRuntime(1874): java.lang.RuntimeException: Unable to start activity ComponentInfo{tri.mylocapp/tri.mylocapp.MainActivity}: java.lang.NullPointerException 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.os.Looper.loop(Looper.java:137) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at dalvik.system.NativeStart.main(Native Method) 
04-06 13:13:01.643: E/AndroidRuntime(1874): Caused by: java.lang.NullPointerException 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at tri.mylocapp.MainActivity.setUpMap(MainActivity.java:61) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at tri.mylocapp.MainActivity.onCreate(MainActivity.java:35) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.Activity.performCreate(Activity.java:5008) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
04-06 13:13:01.643: E/AndroidRuntime(1874):  ... 11 more 
04-06 13:13:01.671: E/SocketStream(342): readFully was waiting for 403440 bytes, got 49152 
04-06 13:13:01.671: E/SocketStream(342): readFully was waiting for 354288 bytes, got 49152 
04-06 13:13:01.671: E/SocketStream(342): readFully was waiting for 305136 bytes, got 49152 
04-06 13:13:01.671: E/SocketStream(342): readFully was waiting for 255984 bytes, got 49152 
04-06 13:13:01.671: E/SocketStream(342): readFully was waiting for 206832 bytes, got 49152 

답변

1

당신은 null로 GoogleMap으로 개체를 초기화해야합니다.

즉.

private void setUpMap(){ 
     if (googlemap == null){ //in your code googlemap var is uninitialized at this point 
     ...}} 

라인 변경 시도 :

GoogleMap googlemap; 

GoogleMap googlemap = null; 

에, 그리고 방법에 의해; 난 단지 디버그 정보를 포함 해 주셔서 감사합니다. 나는 여기에있는이 안드로이드 질문 중 일부를 둘러 보았고 사람들이 코드를 포함하는 상황을 계속 보았습니다. 오류 정보는 표시되지 않습니다. 내 마음 속에는 정비소에 가서 정비사에게 왜 차가 우스운 운전을하는지, 그리고 그들이 밖으로 나가서 그것을 보느냐고 묻는 것과 현실적으로 같습니다. 당신은 집에서 당신의 차고에서 그것들을 말한다. ...

+0

고맙다. 나는 그것을 고쳤다. 그러나 앱은 여전히 ​​멈 춥니 다. 고정 코드가 더 많은 오류를 생성하므로 고정 코드가 현재 오류를 수정하고 앱이 다음 단계로 넘어갈 때 오류가 다시 발생하기 때문에 이것이 맞다고 생각됩니다. 더 많은 오류를 해결하도록 도와 줄 수 있습니까? 나는 logcat을 읽는 데 많은 경험이 없다. –

+0

코드와 logcat을 업데이트했습니다. –

+1

나는 그 원인을 발견하고 고쳤다. lm (location manager)을 초기화하지 않을 것입니다. 이제 모든 것이 OK입니다. 마커를 추가하는 것도 좋습니다. 다음 단계로 이동합니다 : 두 위치의 방향을 찾으십시오. 도와 줘서 고마워. –