gpt4 book ai didi

android - 更新 map 时 Android 谷歌地图上的 NullPointer 异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:44:13 27 4
gpt4 key购买 nike

我最近收录了 ACRA在我的应用程序中,它包含一个 GoogleMapSupportFragment。我现在收到一些崩溃报告,但我无法在我的设备上重现这些报告。如果我想在 map 上放置新标记,应用程序会崩溃。每个标记都与一个位置相关联,该位置具有更多信息(地址、名称、....)。

这是我管理 GoogleMap

的类
public SignManager(MainActivity activity, GoogleMap map) {
mActivity = activity;
this.mMap = map;

initMap();
}


private void initMap() {
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.setMyLocationEnabled(true);
//...
}

这是函数,它(有时)抛出 NullPointerException。函数 updateSignsInViewAsyncTasksLocalBroadcast 调用,它从服务器接收带有新 Markers 的更新.

public void updateSignsInView(LocationWO[] mSignArray) {

if(mSignArray == null){
Log.e(DEBUG_TAG,"updateSignsInView() -> mSignArray null");
return;
}

resetMap(); //delete some unneeded data and do mMap.clear()

mMarkerLocationMap = new HashMap<Marker, LocationWO>();

for (int i = 0; i < mSignArray.length; i++) {

//!!! this is the bad line: SignManager.java:101
Marker marker = mMap.addMarker(createMapMarker(mSignArray[i]));

mMarkerLocationMap.put(marker, mSignArray[i]);
}

}


//create a new Marker with given information
private MarkerOptions createMapMarker(LocationWO mLocation) {

MarkerOptions mMarker = new MarkerOptions()
.position(
new LatLng(mLocation.getmLatitude(), mLocation
.getmLongitude()))
.title(mLocation.getmName()
.icon(BitmapDescriptorFactory.fromBitmap(icon));

return mMarker;
}

这是我收到的 LogCat:

USER_COMMENT=null
ANDROID_VERSION=4.1.1
APP_VERSION_NAME=0.9
BRAND=htc_europe
PHONE_MODEL=HTC One X
CUSTOM_DATA=
STACK_TRACE=java.lang.NullPointerException
at maps.aj.bk.a(Unknown Source)
at maps.aj.bk.a(Unknown Source)
at maps.aj.al.a(Unknown Source)
at bcn.onTransact(SourceFile:167)
at android.os.Binder.transact(Binder.java:326)
at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.addMarker(Unknown Source)
at com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
at MYAPP.SignManager.updateSignsInView(SignManager.java:101)
at MYAPP.MainActivity$1.onReceive(MainActivity.java:389)
at android.support.v4.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:297)
at android.support.v4.content.LocalBroadcastManager.access$000(LocalBroadcastManager.java:46)
at android.support.v4.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:116)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5493)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
at dalvik.system.NativeStart.main(Native Method)

我 99.9% 确定 mMap 不能为 null。 mMap 在 onCreate() 方法中设置。

有人有什么想法吗?

编辑:setupMap 函数

private void setUpMapIfNeeded() {

if (mMap == null) {
mMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map_screen)).getMap();

if (mMap != null) {
setUpMap();
}
}
}

最佳答案

这里的问题是 icon 传递的是 null

But if the Bitmap-Icon is null, shouldn't it crash in the createMarker()method? Or will it crash later, because there is no icon tp place at the map?

是的,如果它直接在 GoogleMap.addMarkerBitmapDescriptorFactory.fromBitmap 中抛出 NPE 会更好,但它不会在你的 createMapMarker< 中发生 除非您在 icon 上调用方法。

不可能说出为什么它是 null,因为问题中没有相关代码,但我怀疑当用户离开应用程序时进程被终止,然后在他们返回时重新创建。

关于android - 更新 map 时 Android 谷歌地图上的 NullPointer 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17443970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com