找不到类'com.google.maps.android.heatmaps.HeatmapTileProvider $ Builder'

时间:2014-03-10 03:21:32

标签: android eclipse google-maps-api-2

我正在关注在Android上制作地图的Google说明,到目前为止,我已经成功了。

但是,当我尝试使用几个lat lng添加热图时,应用程序失败并收到以下错误消息

Could not find class 'com.google.maps.android.heatmaps.HeatmapTileProvider$Builder', referenced from method com.example.heatmap.MainActivity.addHeatMap

我到处搜索,我找不到解决方法。根据在线说明,与Google Play服务一样正确添加了Utils lib。谁能告诉我这里我做错了什么。

对于Clarity,地图工作正常,但当我调用热图方法时,应用程序失败。

package com.example.heatmap;


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

import org.json.JSONObject;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.UiSettings;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.TileOverlay;
import com.google.android.gms.maps.model.TileOverlayOptions;
import com.google.maps.android.heatmaps.HeatmapTileProvider;

/**
 * This shows how to create a simple activity with a map and a marker on the map.
 * <p>
 * Notice how we deal with the possibility that the Google Play services APK is not
 * installed/enabled/updated on a user's device.
 */
public class MainActivity extends FragmentActivity {
    /**
     * Note that this may be null if the Google Play services APK is not available.
     */
    private GoogleMap mMap;
    static final LatLng Ireland = new LatLng(53.5056, -7.8289);
    static final LatLng IrelandCenter = new LatLng(53.4026137,-7.969749234);
    private UiSettings Settings;
    private JSONObject testjson = new JSONObject();
    private static String file = "sample_locations.json";

    private HeatmapTileProvider mProvider;
    private TileOverlay mOverlay;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SupportMapFragment mapFragment =
                (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);

        if (savedInstanceState == null) {
            // First incarnation of this activity.
            mapFragment.setRetainInstance(true);
        } else {
            // Reincarnated activity. The obtained map is the same map instance in the previous
            // activity life cycle. There is no need to reinitialize it.
            mMap = mapFragment.getMap();
        }

        setUpMapIfNeeded();


    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    private void setUpMapIfNeeded() {
        // Do a null check to confirm that we have not already instantiated the map.
        if (mMap == null) {
            // Try to obtain the map from the SupportMapFragment.
            mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                    .getMap();
            // Check if we were successful in obtaining the map.
            if (mMap != null) {
                setUpMap();
                locateMapIreland();
                createMarker();
                addHeatMap();
            }
        }
    }

    /**
     * This is where we can add markers or lines, add listeners or move the camera. In this case, we
     * just add a marker near Africa.
     * <p>
     * This should only be called once and when we are sure that {@link #mMap} is not null.
     */






    private void setUpMap() {
        mMap.setMyLocationEnabled(true);
        mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        Settings = mMap.getUiSettings();

        Settings.setRotateGesturesEnabled(false);
        Settings.setZoomGesturesEnabled(true);
        Settings.setCompassEnabled(true);
    }

    private void locateMapIreland(){
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(IrelandCenter,7));
    }

    private void createMarker(){
        Marker testMarker = mMap.addMarker(new MarkerOptions()
                                  .position(Ireland)
                                  .draggable(true)
                                  .title("Title text")
                                  .snippet("Snippet text")
                                  .flat(false));

        testMarker.showInfoWindow();

    }

    private void addHeatMap() {
        List<LatLng> list = new ArrayList<LatLng>();

        LatLng one = new LatLng(53.998,-8.624);
        list.add(one);
        LatLng two = new LatLng(52.443,-8.988);
        list.add(two);
        LatLng three = new LatLng(52.286,-8.319);
        list.add(three);
        LatLng four = new LatLng(54.162,-8.253);
        list.add(four);
        LatLng five = new LatLng(53.364,-6.453);
        list.add(five);

        List <LatLng> listTwo = null;

        // Get the data: latitude/longitude positions of police stations.


        // Create a heat map tile provider, passing it the latlngs of the police stations.
        mProvider = new HeatmapTileProvider.Builder()
            .data(list)
            .build();
        // Add a tile overlay to the map, using the heat map tile provider.
        mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
    } 

}

3 个答案:

答案 0 :(得分:2)

事实证明,您需要确保在属性标签下已将Google Play服务和google util库添加为项目的libs。教程不会显示这一点,只显示如何将播放服务作为lib添加到utils

答案 1 :(得分:0)

在线说明对我不起作用,我使用了以下步骤:

  1. 在主要应用程序中&gt;选择项目属性&gt;转到Java Build Path&gt;添加罐子&gt;选择Library&gt;的bin文件夹。选择library.jar
  2. 在图书馆项目中&gt;选择项目属性&gt; Android&gt;检查isLibrary
  3. 在MainApplication&gt;中选择项目属性&gt;转到Android&gt;在库部分添加对库的引用。
  4. 我在stackoverflow中找到了这个步骤,但是我找不到链接。

答案 2 :(得分:0)

导入库,转到项目属性,转到android,然后检查“是库”添加app_compact然后,转到库属性,转到android工具并添加支持库!然后将库(播放服务库和map util库)添加到demo_project中,这对我有用:)