2011-01-24 2 views
3

Googleマップビューのコードは現在変更されていますが、マップがロードされ、エラーを返します。AndroidのGoogleマップビューでは、onTap()を使用するとエラーが返されます - Alertdialogが表示されると思われます

誰もがこれで私を助けることができれば、私はそれを本当に感謝し、私はそれがmContextにnull値とは何かを持っていると考えているが、私はよく分からない:

protected boolean onTap(int index) { 
OverlayItem item = mOverlays.get(index); 
Context mContext = null; 
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 

マイマップクラス:

マイHelloItemizedOverlayクラス
package testing.map; 

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.content.Context; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 

public class Mapview extends MapActivity { 
    /** Called when the activity is first created. */ 

protected boolean isRouteDisplayed(){ 
    return false; 
} 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mapview); 

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

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

     //Declared longitude/latitude as doubles as GeoPoint only uses 'int' - converted to microdegrees 
     double latitude = 51.545538; 
     double longitude = -0.477247; 
     GeoPoint point = new GeoPoint((int)(latitude * 1e6), (int)(longitude * 1e6)); 

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

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

    } 

:あなたはこのようなコンテキストを渡すことができます

package testing.map; 

import java.util.ArrayList; 
import android.graphics.drawable.Drawable; 
import android.app.AlertDialog; 
import android.content.Context; 
import com.google.android.maps.ItemizedOverlay; 
import com.google.android.maps.OverlayItem; 

public class HelloItemizedOverlay extends ItemizedOverlay { 

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

    public HelloItemizedOverlay(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker)); 

    } 
    public void addOverlay(OverlayItem overlay) { 

     mOverlays.add(overlay); 
     populate(); 
    } 
    public HelloItemizedOverlay(Drawable defaultMarker, Context context) { 
      super(defaultMarker); 
      Context mContext = context; 
     } 

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

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

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

} 

答えて

0

、ここにあります擬似コード:

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(this,drawable); 
5

メインクラスのコンテキストがありません。これに代えて

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, mContext); 
where mContext = this; 

この追加

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable); 
1

を私はまた、あなたがマーカーをタップするとHelloGoogleMapsチュートリアル・コードは、NPEで失敗したことがわかりました。

MapActivityを拡張するインスタンスから)thisを渡すと、ダイアログが表示されます。必要な

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this); 

コンストラクタ:

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

変更二つの場所:

1.

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this); 

2.

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