繁体   English   中英

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

[英]Nullpointer in Android map (using Google Maps api v2)

我对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>

问题是在setComSci()您正在使用map.addMarker但是mapMapActivity类中。

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));
  } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM