[英]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
但是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));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.