2010-06-04 88 views
0

我試圖顯示使用該按照手機的方向旋轉的地圖。我已經重寫了一部分谷歌示例,以使用SensorEventListner而不是SensorListenerMapView:推出應用程序崩潰

我的問題是,當我嘗試使用findViewByID()方法來顯示我的應用程序在啓動時崩潰的映射。如果我使用MapView(Context, String)來創建我的視圖,它工作正常。我錯過了一些使用main.xml佈局文件的東西嗎?這有什麼問題?

在此先感謝。

這裏是我的代碼:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
    mRotateView = new RotateView(this); 
    // Seems ok 
    mMapView = new MapView(this, "0t6yfD1f6K1wZe99RmpB2KdpQHl23WZSPRtGLEg"); 

    // Does not work: application crash on launch. 
    //setContentView(R.layout.main); 
    //mMapView = (MapView) findViewById(R.id.mapview); 

    mRotateView.addView(mMapView); 
    setContentView(mRotateView); 

    mMyLocationOverlay = new MyLocationOverlay(this, mMapView); 
    mMyLocationOverlay.runOnFirstFix(new Runnable() { 
     public void run() { 
      mMapView.getController().animateTo(
        mMyLocationOverlay.getMyLocation()); 
     } 
    }); 
    mMapView.getOverlays().add(mMyLocationOverlay); 
    mMapView.getController().setZoom(18); 
    mMapView.setClickable(true); 
    mMapView.setEnabled(true); 
    mMapView.setBuiltInZoomControls(true); 

} 

AndroidManifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.hello" android:versionCode="1" 
    android:versionName="1.0"> 

     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
     <uses-permission android:name="android.permission.INTERNET" /> 

    <application android:icon="@drawable/icon" android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar"> 

     <uses-library android:name="com.google.android.maps" /> 

     <activity android:name=".HelloGoogleMapsActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

    </application> 

</manifest> 

RES /佈局/ main.xml中:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<com.google.android.maps.MapView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/mapview" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:clickable="true" 
android:apiKey="0t6yfD1f6K1wZe99RmpB2KdpQHl23WZSPRtGLEg" 
/> 
</LinearLayout> 

06-04 18:07:31.512: INFO/ActivityManager(66): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.hello/.HelloGoogleMapsActivity } 
06-04 18:07:31.842: INFO/ActivityManager(66): Start proc com.example.hello for activity com.example.hello/.HelloGoogleMapsActivity: pid=207 uid=10025 gids={3003, 1015} 
06-04 18:07:33.053: ERROR/ActivityThread(207): Failed to find provider info for com.google.settings 
06-04 18:07:33.063: ERROR/ActivityThread(207): Failed to find provider info for com.google.settings 
06-04 18:07:33.093: ERROR/ActivityThread(207): Failed to find provider info for com.google.settings 
06-04 18:07:33.282: DEBUG/qemud(34): fdhandler_accept_event: accepting on fd 10 
06-04 18:07:33.282: DEBUG/qemud(34): created client 0x150b8 listening on fd 15 
06-04 18:07:33.282: DEBUG/qemud(34): client_fd_receive: attempting registration for service 'sensors' 
06-04 18:07:33.282: DEBUG/qemud(34): client_fd_receive: -> received channel id 8 
06-04 18:07:33.292: DEBUG/qemud(34): client_registration: registration succeeded for client 8 
06-04 18:07:33.302: DEBUG/qemud(34): fdhandler_event: disconnect on fd 15 
06-04 18:07:33.312: DEBUG/SensorManager(207): found sensor: Goldfish 3-axis Accelerometer, handle=0 
06-04 18:07:33.725: DEBUG/AndroidRuntime(207): Shutting down VM 
06-04 18:07:33.725: WARN/dalvikvm(207): threadid=3: thread exiting with uncaught exception (group=0x4001aa28) 
06-04 18:07:33.732: ERROR/AndroidRuntime(207): Uncaught handler: thread main exiting due to uncaught exception 
06-04 18:07:33.772: ERROR/AndroidRuntime(207): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hello/com.example.hello.HelloGoogleMapsActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.os.Looper.loop(Looper.java:123) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at dalvik.system.NativeStart.main(Native Method) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.view.ViewGroup.addViewInner(ViewGroup.java:1856) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.view.ViewGroup.addView(ViewGroup.java:1751) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.view.ViewGroup.addView(ViewGroup.java:1708) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.view.ViewGroup.addView(ViewGroup.java:1688) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at com.example.hello.HelloGoogleMapsActivity.onCreate(HelloGoogleMapsActivity.java:156) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
06-04 18:07:33.772: ERROR/AndroidRuntime(207):  ... 11 more 
06-04 18:07:33.812: INFO/Process(66): Sending signal. PID: 207 SIG: 3 
06-04 18:07:33.822: INFO/dalvikvm(207): threadid=7: reacting to signal 3 
06-04 18:07:33.962: INFO/dalvikvm(207): Wrote stack trace to '/data/anr/traces.txt' 
06-04 18:07:34.412: INFO/ARMAssembler(66): generated scanline__00000077:03515104_00000000_00000000 [ 27 ipp] (41 ins) at [0x2aa9e8:0x2aaa8c] in 1786681 ns 
06-04 18:07:34.442: INFO/ARMAssembler(66): generated scanline__00000077:03515104_00001001_00000000 [ 64 ipp] (84 ins) at [0x2ac4f8:0x2ac648] in 2802312 ns 
06-04 18:07:41.580: WARN/ActivityManager(66): Launch timeout has expired, giving up wake lock! 
06-04 18:07:42.550: WARN/ActivityManager(66): Activity idle timeout for HistoryRecord{4379c288 com.example.hello/.HelloGoogleMapsActivity} 

我認爲這個問題是我叫的setContentView()2次:

setContentView(R.layout.main); 
mMapView = (MapView) findViewById(R.id.mapview); 

mRotateView.addView(mMapView); 
setContentView(mRotateView); 

我試圖評論第一的setContentView(R.layout.main);但該應用程序在啓動時仍然崩潰。它導致一個NullPointerException:

06-05 10:30:10.272: WARN/dalvikvm(211): threadid=3: thread exiting with uncaught exception (group=0x4001aa28) 
06-05 10:30:10.282: ERROR/AndroidRuntime(211): Uncaught handler: thread main exiting due to uncaught exception 
06-05 10:30:10.312: ERROR/AndroidRuntime(211): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hello/com.example.hello.HelloGoogleMapsActivity}: java.lang.NullPointerException 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.app.ActivityThread.access$2100(ActivityThread.java:116) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.os.Looper.loop(Looper.java:123) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.app.ActivityThread.main(ActivityThread.java:4203) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at java.lang.reflect.Method.invoke(Method.java:521) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at dalvik.system.NativeStart.main(Native Method) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211): Caused by: java.lang.NullPointerException 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.view.ViewGroup.addView(ViewGroup.java:1701) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.view.ViewGroup.addView(ViewGroup.java:1688) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at com.example.hello.HelloGoogleMapsActivity.onCreate(HelloGoogleMapsActivity.java:156) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364) 
06-05 10:30:10.312: ERROR/AndroidRuntime(211):  ... 11 more 

現在我知道問題來自哪裏;但我不知道如何使用main.xml文件創建我的MapView。

我使用新的MapView()代替;它確實有效,但它是做這件事的好方法嗎?

回答

0

如果您爲一個視圖定義了一個類,則該類名應該寫入xml文件的項目中。在這種情況下,它看起來像onCreate函數沒有引用到您的佈局main.xml文件。試試layout.findViewById(R.id.mapview);而不只是findViewById(R.id.mapview);.如果這不起作用,您還可以嘗試在調用mapview之前添加此項:

setContentView(R.layout.main);