Учебное пособие по Google Map View - Наложения - PullRequest
0 голосов
/ 17 ноября 2011

Я следовал учебному пособию по просмотру карт Google по этой ссылке http://developer.android.com/resources/tutorials/views/hello-mapview.html
Я сделал первое о создании карты, но у меня возникли проблемы с добавлением оверлеев. Вот исходный код:

package rs.iz.stevy.wifi;

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 Overlay extends ItemizedOverlay {

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

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

    public Overlay(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();
    }

    @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;
    }

}

Ошибка появляется в этой строке: AlertDialog.Builder dialog = new AlertDialog.Builder (mContext); Eclipse показывает, что mContext не может быть преобразован в переменную.

Вот класс деятельности:

rs.iz.stevy.wifi;

import java.util.List;

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

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


public class WiFiKupacicaActivity extends MapActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView mapa= (MapView) findViewById(R.id.Mapa1);
        mapa.setBuiltInZoomControls(true);
        mapa.setSatellite(true);

       GeoPoint initGeoPoint = mapa.getMapCenter();

    List<Overlay> mapOverlays = mapa.getOverlays();
    Drawable drawable = this.getResources().getDrawable(R.drawable.kupacica);
    Overlay itemizedoverlay = new Overlay (drawable);

    }

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

Eclipse show error Невозможно создать экземпляр Overlay в этой строке: Наложение itemizedoverlay = новое наложение (отрисовка);

Если вы видите здесь любую ошибку, которую можно легко исправить, пожалуйста, ответьте, потому что это мои первые попытки написать приложение для Android.

1 Ответ

2 голосов
/ 17 ноября 2011

Первая ошибка связана с тем, что вы определили mContext как локальную переменную в конструкторе, а не как переменную экземпляра.Для исправления переместите строку Context mContext; из конструктора (поместите ее прямо перед этой строкой public Overlay(Drawable defaultMarker, Context context) {).Вы хотите объявить переменные экземпляра вне какого-либо метода, но внутри самого класса.

Ваша вторая ошибка возникает из-за того, что Overlay является абстрактным классом.Вы не можете создать экземпляр абстрактного класса с «новым».Здесь вы хотите создать экземпляр своего подкласса Overlay.В ваших операторах импорта вы импортируете com.google.android.maps.Overlay, поэтому вам кажется, что вы создаете его экземпляр, а не свой подкласс.Чтобы исправить, замените

Overlay itemizedoverlay = new Overlay (drawable);

на

rs.iz.stevy.wifi.Overlay itemizedoverlay = new rs.iz.stevy.wifi.Overlay (drawable);

На практике вам следует избегать давать классу имя абстрактного класса, уже находящегося в его собственной иерархии (чтобы избежать ошибок импорта, подобных этой).

...