我正在关注在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));
}
}
答案 0 :(得分:2)
事实证明,您需要确保在属性标签下已将Google Play服务和google util库添加为项目的libs。教程不会显示这一点,只显示如何将播放服务作为lib添加到utils
答案 1 :(得分:0)
在线说明对我不起作用,我使用了以下步骤:
我在stackoverflow中找到了这个步骤,但是我找不到链接。
答案 2 :(得分:0)
导入库,转到项目属性,转到android,然后检查“是库”添加app_compact然后,转到库属性,转到android工具并添加支持库!然后将库(播放服务库和map util库)添加到demo_project中,这对我有用:)