-2

我正在尝试在我的应用程序中制作一张地图,其中包含我的数据库 MySQL 中的纬度和经度。

当点击我想在地图上显示时,这是我的截图列表视图。

这是我的活动:

public class Map_TokoBengkel extends MapActivity {
    private MapView mapView;
    private LocationManager locManager;
    private LocationListener locListener;
    Entity_BikeShopRepair entity;
    private ArrayList<Entity_BikeShopRepair> list_lokasi = new ArrayList<Entity_BikeShopRepair>();

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map_shoprepair);

        final ActionBar actionBar = (ActionBar) findViewById(R.id.actionbar);
        actionBar.setTitle(getString(R.string.app_name));

        actionBar.setHomeAction(new IntentAction(this, new Intent(this,
                Home_Activity.class), R.drawable.home));

        initLokasi();
        initMap();
        initLocationManager();
    }

    /**
     * Initialize the map to the Data Location.
     */
    private void initLokasi() {
        list_lokasi.add(entity.getLat(), entity.getLng(), 1, entity.getShop_Name());
    }

    /**
     * Initialize the map to the LinearLayout.
     */
    private void initMap() {
        mapView = (MapView) findViewById(R.id.map_view);
        mapView.displayZoomControls(true);
        mapView.setBuiltInZoomControls(true);
        mapView.getController().setZoom(15);
    }

    /**
     * Initialize the location manager.
     */
    private void initLocationManager() {
        locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        locListener = new LocationListener() {
            // method ini akan dijalankan apabila koordinat GPS berubah
            public void onLocationChanged(Location newLocation) {
                tampilkanPosisikeMap(newLocation);
            }

            public void onProviderDisabled(String arg0) {
            }

            public void onProviderEnabled(String arg0) {
            }

            public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
            }
        };
        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
                1000, locListener);

    }

    /**
     * This method will be called when current position changed is submitted via
     * the GPS.
     * 
     * @param newLocation
     */
    protected void tampilkanPosisikeMap(Location newLocation) {
        List<Overlay> overlays = mapView.getOverlays();

        // first remove old overlay
        if (overlays.size() > 0) {
            for (Iterator iterator = overlays.iterator(); iterator.hasNext();) {
                iterator.next();
                iterator.remove();
            }
        }

        // transform the location to a geopoint
        GeoPoint geopoint = new GeoPoint(
                (int) (newLocation.getLatitude() * 1E6),
                (int) (newLocation.getLongitude() * 1E6));
        GeoPoint myposition = geopoint;
        Location locationA = new Location("point A");
        Location locationB = new Location("point B");
        locationA.setLatitude(geopoint.getLatitudeE6() / 1E6);
        locationA.setLongitude(geopoint.getLongitudeE6() / 1E6);
        // initialize icon
        Drawable icon = getResources().getDrawable(R.drawable.marker);
        icon.setBounds(0, 0, icon.getIntrinsicWidth(),
                icon.getIntrinsicHeight());

        // create my overlay and show it
        MyItemizedOverlay overlay = new MyItemizedOverlay(icon, this);
        OverlayItem item = new OverlayItem(geopoint, "My Location", "Lat:"
                + locationA.getLatitude() + "\nLng:" + locationA.getLongitude());
        overlay.addItem(item);
        mapView.getOverlays().add(overlay);
        for (int i = 0; i < list_lokasi.size(); i++) {
            geopoint = new GeoPoint((int) (list_lokasi.get(i).lat * 1E6),
                    (int) (list_lokasi.get(i).lng * 1E6));
            locationB.setLatitude(geopoint.getLatitudeE6() / 1E6);
            locationB.setLongitude(geopoint.getLongitudeE6() / 1E6);

            double distance = locationA.distanceTo(locationB);

            if (list_lokasi.get(i).category == 1) {
                icon = getResources().getDrawable(R.drawable.bicycle_shop);
            } else if (list_lokasi.get(i).category == 2) {
                icon = getResources().getDrawable(R.drawable.bicycle_shop);
            } else if (list_lokasi.get(i).category == 3) {
                icon = getResources().getDrawable(R.drawable.bicycle_shop);
            }

            icon.setBounds(0, 0, icon.getIntrinsicWidth(),
                    icon.getIntrinsicHeight());
            overlay = new MyItemizedOverlay(icon, this);
            item = new OverlayItem(geopoint, list_lokasi.get(i).lokname, "Lat:"
                    + list_lokasi.get(i).lat + "\nLng:"
                    + list_lokasi.get(i).lng + "\n Jarak:" + distance + "m");
            overlay.addItem(item);
            mapView.getOverlays().add(overlay);
        }

        // move to location
        mapView.getController().animateTo(myposition);

        // redraw map
        mapView.postInvalidate();
    }

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

但是在那个代码中有一些错误

private void initLokasi() {
    list_lokasi.add(entity.getLat(), entity.getLng(), 1, entity.getShop_Name());
} 

错误信息是:

The method add(int, Entity_BikeShopRepair) in the type ArrayList<Entity_BikeShopRepair> is not applicable for the arguments (double, double, int, String)`.

有人可以帮我解决我的问题吗?

4

1 回答 1

1

问题就在错误中

ArrayList 类型中的方法 add(int, Entity_BikeShopRepair) 不适用于参数(double、double、int、String)

编译器告诉您,它希望您给它一个 int 和一个 Entity_BikeShopRepair,而是给它四个参数,所以它不知道该怎么做。

list_lokasi.add(entity.getLat(), entity.getLng(), 1, entity.getShop_Name()); 

看起来你只需要做

list_lokasi.add(1, entity);

或者,如果您不关心实体被添加到列表中的哪个位置,

list_lokasi.add(entity);
于 2012-09-30T20:03:07.140 回答