Android地图中的Nullpointer(使用Google Maps api v2)

时间:2014-09-11 17:35:31

标签: java android google-maps google-maps-api-3

我对Android开发有点新意,所以请耐心等待。

我正在使用Google Maps API V2制作校园地图。目前我正在尝试在每个建筑物上设置标记,我成功地做到了这一点。但是,我决定将标记代码移动到一个单独的类(以减少混乱),但这给了我一些问题。

这是我的主要类MapActivity.java

的相关代码
`public class MapActivity extends Activity implements OnMenuItemClickListener {

    private static final LatLng UCTLL = new LatLng(-33.957674, 18.460687); //Coordinates of Jameson Hall

    GoogleMap map;
    MarkerClass markers;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);
        setCamera(UCTLL,17);    
        //setUpHandler();
        //aHandler.sendEmptyMessageDelayed(0, 5);
        markers.setComSci();
    }

    @SuppressLint("NewApi")
    private void setCamera(LatLng startingpoint, int zoom){
        map = ((MapFragment) getFragmentManager()
                .findFragmentById(R.id.map)).getMap();
        map.setMyLocationEnabled(true);
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(UCTLL, 17));//Set Zoom level
        map.getUiSettings().setRotateGesturesEnabled(false);// Often rotates when trying to zoom, so rotations are diabled
        CameraPosition cameraPosition = new CameraPosition.Builder()
        .target(startingpoint)      
        .zoom(zoom)               
        .bearing(90)                
        .tilt(20)                   // Sets the tilt of the camera 
        .build();
        map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
    }`

这是标记类

public class MarkerClass extends MapActivity{

    String itemtype;
    LatLng coordinates;
    String name;

    public void setComSci(){

        name = "Computer Science Building";
        itemtype = "Building";
        coordinates= new LatLng(-33.956812, 18.461021);
        Marker comscimark = map.addMarker(new MarkerOptions()
        .position(coordinates)
        .draggable(true)
        .title(name));

    } 
  }

如果我将“setComSci()”方法移动到主类中,它可以很好地工作,但如果我现在运行代码,我会得到:

`09-11 19:32:22.737: E/AndroidRuntime(11729): FATAL EXCEPTION: main
09-11 19:32:22.737: E/AndroidRuntime(11729): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.map.uctmapfinal/com.map.uctmapfinal.MapActivity}: java.lang.NullPointerException
09-11 19:32:22.737: E/AndroidRuntime(11729):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
09-11 19:32:22.737: E/AndroidRuntime(11729):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
`

我愚蠢吗?我错过了什么?

编辑:

这是activity_map.xml

   <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageButton
        android:id="@+id/searchbutton"
        android:layout_width="50dp"
        android:layout_height="45dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:contentDescription="@null"
        android:onClick="searchmethod"
        android:scaleType="fitXY"
        android:src="@drawable/search" />

    <ImageButton
        android:id="@+id/filterrbutton"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:contentDescription="@null"
        android:drawable="@drawable/search"
        android:onClick="choosefilter"
        android:scaleType="fitXY"
        android:src="@drawable/filter"
        android:state_pressed="true" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

问题在于setComSci()您使用的是map.addMarker,但map位于MapActivity级。

markers = new  MarkerClass(); //<--- ADD THIS
markers.setComSci(map); //<-- Call using this statement

public class MarkerClass extends MapActivity{
String itemtype;
LatLng coordinates;
String name;
GoogleMap map;

public void setComSci(GoogleMap map){
    this.map = map;
    name = "Computer Science Building";
    itemtype = "Building";
    coordinates= new LatLng(-33.956812, 18.461021);
    Marker comscimark = map.addMarker(new MarkerOptions()
    .position(coordinates)
    .draggable(true)
    .title(name));
  } 
}