【问题标题】:Nullpointer in Android map (using Google Maps api v2)Android 地图中的空指针(使用 Google Maps api v2)
【发布时间】:2014-09-11 17:35:30
【问题描述】:

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

【问题讨论】:

  • 你能把R.layout.activity_map的xml贴出来
  • 我已经编辑了我的答案

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


【解决方案1】:

问题是在setComSci() 中您使用的是map.addMarkermapMapActivity 类中。

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

【讨论】:

  • 好的,保留该行,它需要初始化MakerClass,您是否在应用清单中添加了MapActivity
  • setComSci() 中你正在使用map.addMarkermapMapActivity 类中
  • 太棒了...快乐编码:)
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多