我对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>
答案 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));
}
}