2012-08-26 87 views
0

我正在Google地圖上開發Android應用程序。我已成功在模擬器中的應用程序中顯示MapView。但是,當我試圖在地圖上插入一個精確的標記時,出現了以下有關「無法啓動活動ComponentInfo」的問題。 這裏是我的代碼:無法在Google地圖中顯示精確位置

package com.example.maps; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.view.Menu; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.ItemizedOverlay; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.OverlayItem; 

公共類MainActivity擴展MapActivity {

MapView map; 
MapController controller; 
Drawable d; 
List<Overlay> overlayList; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    map = (MapView)findViewById(R.id.mapRef); 
    map.setBuiltInZoomControls(true); 

    controller = map.getController(); 
    GeoPoint point = new GeoPoint(23129491,72541321); 
    controller.animateTo(point); 
    controller.setZoom(19); 

    d = getResources().getDrawable(R.drawable.taxi); 
    OverlayItem overlayItem = new OverlayItem(point, "Hello there!","This is the taxi"); 
    drawPinpoint draw = new drawPinpoint(d, MainActivity.this); 
    draw.insertPinpoint(overlayItem); 
    overlayList.add(draw); 

} 

static class drawPinpoint extends ItemizedOverlay<OverlayItem>{ 

    private ArrayList<OverlayItem> pinpoints = new ArrayList<OverlayItem>(); 
    private Context c; 

    public drawPinpoint(Drawable arg0) { 
     super(boundCenter(arg0)); 
     // TODO Auto-generated constructor stub 
    } 

    public drawPinpoint(Drawable m, Context context) { 
     // TODO Auto-generated constructor stub 
     this(m); 
     c = context; 
    } 

    @Override 
    protected OverlayItem createItem(int i) { 
     // TODO Auto-generated method stub 
     return pinpoints.get(i); 
    } 

    @Override 
    public int size() { 
     // TODO Auto-generated method stub 
     return pinpoints.size(); 
    } 

    public void insertPinpoint(OverlayItem item){ 
     pinpoints.add(item); 
     this.populate(); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

@Override 
protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
} 

}

這是我的清單文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.maps" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
<uses-library android:name="com.google.android.maps"/> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

這是我爲NullPounterException堆棧跟蹤:

08-26 14:19:11.760:W/dalvikvm(528):線程ID = 1:螺紋與未捕獲的異常退出(組= 0x4001d800) 08-26 14: 19:11.790:E/AndroidRuntime(528):致命例外:主 08-26 14:19:11.790:E/AndroidRuntime(528):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.maps/com.example.maps.MainActivity}:java.lang.NullPointerException 08-26 14:19:11.790:E/AndroidRuntime(528):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 08-26 14/19:11.790:E/AndroidRuntime(528):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 08-26 14:19:11.790:E/AndroidRuntime(5 28):at android.app.ActivityThread.access $ 2300(ActivityThread.java:125) 08-26 14:19:11.790:E/AndroidRuntime(528):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java :2033) 08-26 14:19:11.790:E/AndroidRuntime(528):at android.os.Handler.dispatchMessage(Handler.java:99) 08-26 14:19:11.790:E/AndroidRuntime(528) ):at android.os.Looper.loop(Looper.java:123) 08-26 14:19:11.790:E/AndroidRuntime(528):at android.app.ActivityThread.main(ActivityThread.java:4627) 08-26 14:19:11.790:E/AndroidRuntime(528):在java.lang.reflect.Method.invokeNative(本地方法) 08-26 14:19:11.790:E/AndroidRuntime(528):在java。 lang.reflect.Method.invoke(Method.java:521) 08-26 14:19:11.790:E/AndroidRuntime(528):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(Zy goteInit.java:868) 08-26 14:19:11.790:E/AndroidRuntime(528):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 08-26 14:19: 11.790:E/AndroidRuntime(528):在dalvik.system.NativeStart.main(本地方法) 08-26 14:19:11.790:E/AndroidRuntime(528):引起:java.lang.NullPointerException 08-26 14:19:11.790:E/AndroidRuntime(528):at com.example.maps.MainActivity.onCreate(MainActivity.java:42) 08-26 14:19:11.790:E/AndroidRuntime(528):在android。 app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 08-26 14:19:11.790:E/AndroidRuntime(528):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 08-26 14: 19:11.790:E/AndroidRuntime(528):... 11更多

+0

您的堆棧跟蹤在MainActivity.onCreate()方法的代碼的第42行標識爲Null。在此之前放置一個斷點,並查看哪個變量爲空。 –

回答

0

我覺得你的代碼的第42行是:

overlayList.add(draw); 

,你還沒有創建overlayList對象。

相關問題