我努力让用户在地图上触摸时在地图上绘制折线,我知道我哪里出错,我认为问题在于onMapTouch方法,因为地图显示正常,但当我触摸地图时说“不幸”应用程序已停止工作“,您的想法,这是logcat:
17319-17319 /? E / AndroidRuntime:致命异常:主要 过程:com.example.sarahn.myapplication,PID:17319 java.lang.IllegalArgumentException:标记选项中没有位置 在com.google.l.a.ce.a(未知来源) 在com.google.maps.api.android.lib6.d.ft.a(未知来源) 在com.google.android.gms.maps.internal.l.onTransact(SourceFile:167) 在android.os.Binder.transact(Binder.java:380) 在com.google.android.gms.maps.internal.IGoogleMapDelegate $ zza $ zza.addMarker(未知来源) 在com.google.android.gms.maps.GoogleMap.addMarker(未知来源) 在com.example.sarahn.myapplication.MapsActivity.onMapClick(MapsActivity.java:91) 在com.google.android.gms.maps.GoogleMap $ 8.onMapClick(未知来源) 在com.google.android.gms.maps.internal.zzj $ zza.onTransact(未知来源) 在android.os.Binder.transact(Binder.java:380) 在com.google.android.gms.maps.internal.ar.a(SourceFile:93) 在com.google.maps.api.android.lib6.gmm6.c.ac.b(未知来源) 在com.google.maps.api.android.lib6.gmm6.n.bt.d(未知来源) 在com.google.maps.api.android.lib6.gmm6.n.ak.onSingleTapConfirmed(未知来源) 在com.google.maps.api.android.lib6.gmm6.h.g.onSingleTapConfirmed(未知来源) 在com.google.maps.api.android.lib6.gmm6.h.i.handleMessage(未知来源) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:211) 在android.app.ActivityThread.main(ActivityThread.java:5317) at java.lang.reflect.Method.invoke(Native Method) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1016) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
public class MapsActivity extends FragmentActivit implementsGoogleMap.OnMapClickListener{
private GoogleMap mMap;
ArrayList<LatLng> arrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
setUpMapIfNeeded();
arrayList = new ArrayList<LatLng>();
SupportMapFragment f = (SupportMapFragmen) getSupportFragmentManager().findFragmentById(R.id.map);
mMap= f.getMap();
mMap.setMyLocationEnabled(true);
mMap.setOnMapClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
public void onMapClick(LatLng latLng) {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
mMap.addMarker(markerOptions);
PolylineOptions p = new PolylineOptions();
p.color(Color.RED);
p.width(5);
arrayList.add(latLng);
p.addAll(arrayList);
mMap.addPolyline(new PolylineOptions());
mMap.addMarker(new MarkerOptions());
}
答案 0 :(得分:0)
这可能与MarkerOptions的position方法返回您正在设置位置的对象这一事实有关。
尝试:
MarkerOptions markerOptions = new MarkerOptions();
markerOptions = markerOptions.position(latLng);
编辑:
上面我错了。正是因为这行代码:
mMap.addMarker(new MarkerOptions());
您在地图上添加了一个没有位置的新标记。在尝试添加到地图之前,您需要设置标记的位置。我不确定您为什么要在地图中添加第二个标记,因为您已经在用户的触摸位置添加了一个标记。您还尝试在没有属性的情况下向地图添加折线。
试试这个,看看会发生什么:
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
mMap.addMarker(markerOptions);
PolylineOptions p = new PolylineOptions();
p.color(Color.RED);
p.width(5);
arrayList.add(latLng);
p.addAll(arrayList);
mMap.addPolyline(p);