我正在尝试使用Google maps v2运行应用,但Logcat显示错误:
致命异常:主要 java.lang.RuntimeException:无法启动活动ComponentInfo {com.app.mapa / com.app.MapaLugares}:android.view.InflatException:java.lang.NullPointerException
以下是代码:
activity_mapa_lugares.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
MapaLugares.java
package com.app.mapa;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Point;
import android.view.Menu;
import android.widget.Toast;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.Projection;
import com.google.android.gms.maps.model.LatLng;
public class MapaLugares extends FragmentActivity {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mapa_lugares);
mMap = ((MapFragment) getFragmentManager().findFragmentById (R.id.mapa)).
getMap();
mMap.setOnMapClickListener(new OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
Projection proj = mMap.getProjection();
Point coord = proj.toScreenLocation(point);
Toast.makeText(MapaLugares.this, "Click\n" + "Lat: " +
point.latitude + "\n" + "Lng: "+ point.longitude+ "\n" + "X: "
+ coord.x + " - Y: "+ coord.y, Toast.LENGTH_SHORT)
.show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.mapa_lugares, menu);
return true;
}
}
怎么了?
感谢。
答案 0 :(得分:1)
您要将XML文件中的地图设置为类型:SupportMapFragment
:
android:name="com.google.android.gms.maps.SupportMapFragment"
但是在你的java代码中,你试图得到另一个对象:
mMap = ((MapFragment) getFragmentManager().findFragmentById (R.id.mapa)).
getMap();
2问题在这里:
1。您需要提取SupportMapFragment
而不是MapFragment
,如下所示:
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
2。您正在尝试获取错误的ID:在XML中,您为地图指定了:`android:id =“@ + id / map”
在代码中,您尝试获取:(R.id.mapa)
,这是错误的ID。
修复这些问题并告诉我们结果是什么。
您还可以查看我在Google Map API V2上撰写的这篇博文,以便更好地了解如何构建使用Google Map API V2的应用程序: