2011-12-16 18 views
0

簡単な地図アプリを作ると、特定の場所をマークするためのボタンを追加することを計画します。地図ズームが終了するプログラム

しかしズームするとすぐにクラッシュします。

import java.util.List; 

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


import android.graphics.drawable.Drawable; 
import android.os.Bundle; 

public class Main extends MapActivity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    MapView mapView = (MapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 

    List<Overlay> mapOverlays = mapView.getOverlays(); 
    Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); 
    MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable); 

    GeoPoint point = new GeoPoint(19240000,-99120000); 
    OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!"); 

    itemizedoverlay.addOverlay(overlayitem); 
    mapOverlays.add(itemizedoverlay); 
    } 



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

内蔵ズームに触れると、アプリケーションが強制終了されます。

助けがあれば助かります。

編集:スタックトレース

12-16 05:40:04.012: D/dalvikvm(2473): GC_FOR_MALLOC freed 4578 objects/277208 bytes in 49ms 
12-16 05:40:04.151: I/MapActivity(2473): Handling network change notification:CONNECTED 
12-16 05:40:04.151: E/MapActivity(2473): Couldn't get connection factory client 
12-16 05:40:04.271: D/dalvikvm(2473): GC_FOR_MALLOC freed 3049 objects/271640 bytes in 49ms 
12-16 05:40:08.491: D/AndroidRuntime(2473): Shutting down VM 
12-16 05:40:08.491: W/dalvikvm(2473): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
12-16 05:40:08.551: E/AndroidRuntime(2473): FATAL EXCEPTION: main 
12-16 05:40:08.551: E/AndroidRuntime(2473): java.lang.NullPointerException 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:743) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.app.AlertDialog$Builder.<init>(AlertDialog.java:273) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.b00517566.la.MyItemizedOverlay.onTap(MyItemizedOverlay.java:46) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.google.android.maps.ItemizedOverlay.onTap(ItemizedOverlay.java:453) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.google.android.maps.OverlayBundle.onTap(OverlayBundle.java:83) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.google.android.maps.MapView$1.onSingleTapUp(MapView.java:347) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.google.android.maps.GestureDetector.onTouchEvent(GestureDetector.java:533) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.google.android.maps.MapView.onTouchEvent(MapView.java:647) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.view.View.dispatchTouchEvent(View.java:3766) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:897) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:936) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671) 

12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 

12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.app.Activity.dispatchTouchEvent(Activity.java:2086) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1785) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.os.Looper.loop(Looper.java:123) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at java.lang.reflect.Method.invoke(Method.java:521) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
12-16 05:40:08.551: E/AndroidRuntime(2473):  at dalvik.system.NativeStart.main(Native Method) 
12-16 05:40:11.023: I/Process(2473): Sending signal. PID: 2473 SIG: 9 

EDIT

package com.bleh.la; 

    import java.util.ArrayList; 

    import android.app.AlertDialog; 
    import android.content.Context; 
    import android.graphics.drawable.Drawable; 

    import com.google.android.maps.ItemizedOverlay; 
    import com.google.android.maps.OverlayItem; 

    public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> { 


private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
Context mContext; 


public MyItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker)); 
    } 

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 

@Override 
protected OverlayItem createItem(int i) { 
    return mOverlays.get(i); 
} 

@Override 
public int size() { 
    return mOverlays.size(); 
} 

public MyItemizedOverlay(Drawable defaultMarker, Context context) { 
     super(defaultMarker); 
     mContext = context; 
    } 

@Override 
protected boolean onTap(int index) { 
    OverlayItem item = mOverlays.get(index); 
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.show(); 
    return true; 
} 
    } 
+0

は今、それはFML ...だけで正常に動作し、新鮮な実行スタックのログをクリア。あなたがボタンを持っているために私にポインタを渡すことができると仮定しないでくださいマップのポインタは、別の場所にカーソルを置く?新しい質問をするべきですか? – TroothHertz

+0

スクラッチ、それをもう一度やっています。一度は働いたが、今は毎回クラッシュする。 stacktraceの待機 – TroothHertz

+1

MyItemizedOverlayに何らかの問題があるようです。クラッシュする理由を知るためにその情報源を見ることはうれしいでしょう。ソース別に –

答えて

1

私は、このラインはあなたにnullポインタ例外を与える

AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 

と思います。ここmContextはnullですので、あなたのMain.java呼び出しているでの

MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable); 
代わりにコール

MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable,this); 

そして、あなたのコンストラクタは次のようにする必要があり、

public MyItemizedOverlay(Drawable drawable,Context cxt){ 
     super(boundCenter(drawable)); 
     this.mContext = cxt; 
    } 

EDIT:ルックSample Project

Using Google Maps in Android

+0

MyItemizedOverlayに "this"を追加すると、マーカーが消えます – TroothHertz

+0

私は "super" super(defaultMarker)の代わりにthis(defaultMarker)に追加します。これまでのところ、安定しています。 – TroothHertz

1

あなたMyItemizedOverlay.mContextがnullであり、これはNPEが発生します。二番目にboundCenterBottomへの呼び出しを省略 - - 私はあなただけで描画可能取るコンストラクタを削除し、コンストラクタで別の違いもある

MyItemizedOverlay itemizedoverlay = new MyItemizedOverlay(drawable, this); 

に活動中のオーバーレイの作成を変更することをお勧めこの意図的なものです?:

public MyItemizedOverlay(Drawable defaultMarker) { 
    super(boundCenterBottom(defaultMarker)); 
} 
public MyItemizedOverlay(Drawable defaultMarker, Context context) { 
    super(defaultMarker); 
    mContext = context; 
} 
+0

そのクラスのすべては、Androidチュートリアルからまっすぐです。 http://developer.android.com/resources/tutorials/views/hello-mapview.html – TroothHertz

+0

ありがとうございました – TroothHertz

関連する問題