【发布时间】:2015-05-20 07:19:52
【问题描述】:
我的应用程序中有两个片段。 Ons 是地图片段,另一个是列表片段。这两个都添加到一个活动中。这个想法是,当从列表中选择用户时,应用程序会切换到地图片段并显示该用户。问题是我在 GoogleMap 对象上得到了一个 nullPointer 异常。
我知道地图可以工作,因为在地图片段中按下按钮时,我可以看到我的当前位置,但我没有得到'n NullPointer。
这是我的 ListFragment 中的 onClickListener:
listEmployees.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ChildUser childUser = children.get(position);
Tracker.showMapFragment(childUser);
}
});
这是从我的父 Activity 中的 ListFragment 调用的函数:
public static void showMapFragment(ChildUser childUser) {
mViewPager.setCurrentItem(0, true);
MapFragment.showSelectedUser(childUser);
trackingEmployee = true;
}
这是我的 MapFragment 中的适用代码:
初始化:
mMapFragment = new SupportMapFragment() {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d("MAP", "on activity created");
googleMap = mMapFragment.getMap();
googleMap.getUiSettings().setZoomControlsEnabled(false);
}
};
getChildFragmentManager().beginTransaction().add(R.id.map, mMapFragment).commit();
showSelectedUser 函数:
public static void showSelectedUser(ChildUser childUser) {
try {
googleMap.clear();
LatLng point = new LatLng(childUser.getChildLatitude(), childUser.getChildLongetude());
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(point, 15);
MarkerOptions marker = new MarkerOptions();
marker.position(point);
googleMap.addMarker(marker);
googleMap.animateCamera(cameraUpdate);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
我在googleMap.clear(); 收到 NullPointerException。请告诉我我可能做错了什么,因为当我从 MapFragment 中显示我的当前位置时它工作正常。如果您需要更多信息,请告诉我。提前谢谢!
更新
当 MapFragment 可见并按下按钮时,我可以使用以下代码查看用户在 MapFragment 中的当前位置:
public static void showUserLocation() {
googleMap.clear();
if (Tracker.clockedInShift) {
CacheUploads cacheUpload = new CacheUploads(context);
LatLng point = cacheUpload.getMostRecentLocation();
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(point, 15);
MarkerOptions marker = new MarkerOptions();
marker.position(point);
googleMap.addMarker(marker);
googleMap.animateCamera(cameraUpdate);
}
}
地图已正确链接,因为此代码已成功执行。为什么从 ListFragment 访问时 googleMap 对象为空?如果您需要更多信息,请告诉我!谢谢
【问题讨论】:
-
请不要无缘无故投反对票,我可以解决问题
-
您正在传递自定义对象,意味着您确定您正在传递正确的值 showMapFragment。
-
是的,我已经检查过了,正确的 long + lat 值每次都会传递给 MapFragment,但我仍然收到错误 @user3676184
-
@user3676184 应用程序在使用我通过的自定义对象之前崩溃。如问题所述,当我调用 googleMap.clear() 时,我得到一个 NullPointer
-
请评论 googleMap.clear() 并检查输出是什么?