无论我在Android中做什么,MapView都将为空。可能是什么错误?

无论我在Android中做什么,MapView都将为空。可能是什么错误?,android,google-maps,android-mapview,Android,Google Maps,Android Mapview,这是我的位置活动: public class LocationActivity extends MapActivity{ GeoPoint p; Bundle bundle; ArrayList <String> address = new ArrayList<String>(); MapController mc; private LocationManager locationManager; public

这是我的位置活动:

public class LocationActivity extends MapActivity{

    GeoPoint p;
    Bundle bundle;

    ArrayList <String> address  = new ArrayList<String>();

    MapController mc;
    private LocationManager locationManager;


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.map);

        MapView mapView = (MapView)findViewById(R.id.mapView1);

        LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

         Criteria criteria = new Criteria();
           // criteria.setAccuracy(Criteria.ACCURACY_FINE);
             criteria.setAltitudeRequired(false);
             criteria.setBearingRequired(false);
             criteria.setCostAllowed(true);
             String strLocationProvider = lm.getBestProvider(criteria, true);

        Location location = lm.getLastKnownLocation(strLocationProvider);

        if (location == null)
        {
            Toast.makeText(LocationActivity.this, "working", Toast.LENGTH_LONG);
        }
        double   lat =  (double) location.getLongitude();
        double lon = (double) location.getLatitude();

        p = new GeoPoint(
              (int) (lat * 1E6), 
              (int) (lon * 1E6));

        mc = mapView1.getController();
        //        mc.setCenter(new GeoPoint(29450116, 77312191));
        mc.animateTo(p);
        mapView1.setClickable(true);
        mapView1.setBuiltInZoomControls(true);
        mapView1.setSatellite(true);
        mapView1.setTraffic(true);

        mapView1.invalidate();

    }

    @Override
    protected boolean isRouteDisplayed() {
    // TODO Auto-generated method stub
    return false;
    }
}
公共类LocationActivity扩展了MapActivity{
地质点p;
束;
ArrayList地址=新的ArrayList();
地图控制器;
私人场所经理场所经理;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.map);
MapView MapView=(MapView)findViewById(R.id.mapView1);
LocationManager lm=(LocationManager)getSystemService(Context.LOCATION\u服务);
标准=新标准();
//标准.设定准确度(标准.准确度/精细度);
标准。setAltitudeRequired(false);
标准。需要设置(假);
条件.setCostAllowed(true);
字符串strLocationProvider=lm.getBestProvider(条件为true);
位置=lm.getLastKnownLocation(strLocationProvider);
if(位置==null)
{
Toast.makeText(LocationActivity.this,“working”,Toast.LENGTH\u LONG);
}
double lat=(double)location.getLongitude();
double lon=(double)location.getLatitude();
p=新的地质点(
(内部)(纬度*1E6),
(int)(lon*1E6));
mc=mapView1.getController();
//mc.设置中心(新地质点(2945011677312191));
司马迁(p),;
mapView1.可设置可点击(真);
mapView1.SetBuilTinZoomControl(真);
mapView1.设置卫星(真);
mapView1.setTraffic(真);
mapView1.invalidate();
}
@凌驾
受保护的布尔值isRouteDisplayed(){
//TODO自动生成的方法存根
返回false;
}
}
这是我的map.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <com.google.android.maps.MapView 
        android:id="@+id/mapView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:enabled="true"
        android:clickable="true"
         android:apiKey="04KR0_lkSRZxCk_JC9yIkk50f3ZE_JjBT7HJ6jw"
        />

    <Button 
        android:text="Add Location" 
        android:id="@+id/mapButton" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </Button>
</RelativeLayout>


我已经清理了我的项目。创建了一个新的布局来检查它是否工作,但我的MapView仍然为空,并且我得到了一个空指针异常。可能出现什么错误?

看起来您正在分配给mapView,但使用的是mapView1

    // Assigning the value to mapView
    MapView mapView = (MapView)findViewById(R.id.mapView1);

    // accessing mapView1
    mc = mapView1.getController();  // Is this generating the NPE?
希望这有助于…

检查

投掷 IllegalArgumentException,如果提供程序为null或不存在

您必须使用try catch块:

mc = mapView.getController();
try {
    Location location = lm.getLastKnownLocation(strLocationProvider);
    if (location != null) {
        double lat =  (double) location.getLongitude();
        double lon = (double) location.getLatitude();
        p = new GeoPoint((int) (lat * 1E6),  (int) (lon * 1E6));
        mc.animateTo(p);
    }
} catch (IllegalArgumentException e) {
    e.printStackTrace();
}

根据您的标准找不到提供商,您必须对其进行调整。

我同意px3j;如果已切换
MapView MapView=(MapView)findViewById(R.id.mapView1)
MapView mapView1=(MapView)findViewById(R.id.mapView1)请更新您的问题

你能清楚地告诉我们哪一行抛出了NullPointerException吗。也请发布您的日志。这是我的错误:mc=mapView1.getController();问题很可能是findViewByID没有找到视图。此方法返回null,而不是引发异常。在此行放置断点,并在调用后检查mapView。它是空的吗?如果是,请发布活动的整个XML。还要确保您在清单文件中设置了INTERNET和ACCESS\u FINE\u位置权限。也