MapView onCreate在LG设备上抛出NullPointerException [英] MapView onCreate throws NullPointerException on LG devices
问题描述
通过调用onCreate )方法在MapView中。我划分了MapView并拥有自己的类,如下所示:
public class MyMap扩展MapView实现OnMapReadyCallback {
...
在MyMap的构造函数中我调用了onCreate方法
public MyMap(){
...
this.onCreate(null);
this.onResume();
this.getMapAsync(this);
...
}
在运行Android 6的LG设备上,以下例外:
java.lang.NullPointerException:试图调用虚拟方法'android.content.res.Resources com.google 。com.google.maps.api.android.lib6.gmm6.vector.ah.getResources(:com。)上的空对象引用
上的.maps.api.android.lib6.impl.aq.e() (android.util.ResolutionOverride。)< init>(ResolutionOverride.java:56)
at android.view.SurfaceView.init(SurfaceView.java:207 )
at android.view.SurfaceView。< init>(SurfaceView.java:187)
at com.google.maps.api.android.lib6.gmm6.vector.am。< init> (:com.google.android.gms.DynamiteModulesB:1)
,位于com.google.maps.api.android.lib6.gmm6.vector.ah。< init>(:com.google.android.gms .DynamiteModulesB:3)
,位于com.google.maps.api.android.lib6.gmm6.api.am。< init>(:com.google.android.gms.DynamiteModulesB:53)
在com.g oogle.maps.api.android.lib6.gmm6.api.am.a(:com.google.android.gms.DynamiteModulesB:49)
,位于com.google.android.gms.maps.internal.bv。 a(:com.google.android.gms.DynamiteModulesB:38)
,位于com.google.maps.api.android.lib6.impl.az.a(:com.google.android.gms.DynamiteModulesB:80 )
,位于com.google.maps.api.android.lib6.impl.az.a(:com.google.android.gms.DynamiteModulesB:1)
位于com.google.maps.api。 android.lib6.impl.cw.a(:com.google.android.gms.DynamiteModulesB:18)
,位于com.google.android.gms.maps.internal.t.onTransact(:com.google.android .gms.DynamiteModulesB:17)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.maps.internal.IMapViewDelegate $ zza $ zza.onCreate (未知来源)
在com.google.android.gms.maps.MapView $ zza.onCreate(未知来源)
在com.google.android.gms.dynamic.zza $ 3.zzb(未知来源)
在com.google.android.gms.dynamic.zza $ 1.zza(未知来源)
来自com.google.android.gms.maps.MapView $ zzb.zzJy(未知来源)$ b $ c在c om.google.android.gms.maps.MapView $ zzb.zza(未知来源)
在com.google.android.gms.dynamic.zza.zza(未知来源)
来自com.google。 android.gms.dynamic.zza.onCreate(未知来源)
在com.google.android.gms.maps.MapView.onCreate(未知来源)
我发现Airbnb的反应本地地图存在类似的问题,但他们的解决方案似乎与我的问题无关。
https://github.com/airbnb/react-native-maps / issues / 1358
任何帮助或其他想法我都可以尝试,非常感谢。
解决方案您可以尝试使用MapFragment而不是MapView,因为更新的Google Play服务11.0.55不支持MapView。
活动课:
private SupportMapFragment mMapFragment;
@Override
public View onCreateView(LayoutInflater inflater,@Nullable ViewGroup容器,@Nullable Bundle savedInstanceState){
//返回inflater.inflate(R.layout.fragment_find_direction,容器,假);
View view = inflater.inflate(R.layout.fragment_find_direction,null,false);
SupportMapFragment mapFragment =(SupportMapFragment)this.getChildFragmentManager()
.findFragmentById(R.id.map_fragment);
mMapFragment.getMapAsync(this);
mMapFragment = mapFragment;
返回视图;
}
@Override
public void onViewCreated(View view,@Nullable Bundle savedInstanceState){
super.onViewCreated(view,savedInstanceState);
mMapFragment.onCreate(savedInstanceState);
$ / code $ / pre
$ b Xml class:
< fragment
class =com.google.android.gms.maps.SupportMapFragment
android:id =@ + id / map_fragment
android:layout_width =match_parent
android:layout_height =wrap_content
android:layout_below =@ + id / main_lay
android:apiKey =@ string / google_map_key
android:clickable =true
android:enabled =true
android:focusable =true
app:layout_collapseMode =parallax>
< / fragment>
First of all, this problem is for me only reproducible on LG devices (LG G4 and G5) running Android 6. The problem was introduced through the last update of the google play services. If I manually downgrade the google play services on my LG devices the error is gone. Unfortunately I cannot tell my users to do this, so I need to find another solution. As this error is reproducible with my app in the play store I can be certain the error was not introduced through my own code changes.
The error occurs through calling the onCreate() method inside MapView. I subclassed MapView and have my own class like this
public class MyMap extends MapView implements OnMapReadyCallback {
...
}
Inside the constructor of MyMap I call the onCreate method
public MyMap() {
...
this.onCreate(null);
this.onResume();
this.getMapAsync(this);
...
}
On my LG devices running Android 6 this throws the following exception:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources com.google.maps.api.android.lib6.impl.aq.e()' on a null object reference
at com.google.maps.api.android.lib6.gmm6.vector.ah.getResources(:com.google.android.gms.DynamiteModulesB:340)
at android.util.ResolutionOverride.<init>(ResolutionOverride.java:56)
at android.view.SurfaceView.init(SurfaceView.java:207)
at android.view.SurfaceView.<init>(SurfaceView.java:187)
at com.google.maps.api.android.lib6.gmm6.vector.am.<init>(:com.google.android.gms.DynamiteModulesB:1)
at com.google.maps.api.android.lib6.gmm6.vector.ah.<init>(:com.google.android.gms.DynamiteModulesB:3)
at com.google.maps.api.android.lib6.gmm6.api.am.<init>(:com.google.android.gms.DynamiteModulesB:53)
at com.google.maps.api.android.lib6.gmm6.api.am.a(:com.google.android.gms.DynamiteModulesB:49)
at com.google.android.gms.maps.internal.bv.a(:com.google.android.gms.DynamiteModulesB:38)
at com.google.maps.api.android.lib6.impl.az.a(:com.google.android.gms.DynamiteModulesB:80)
at com.google.maps.api.android.lib6.impl.az.a(:com.google.android.gms.DynamiteModulesB:1)
at com.google.maps.api.android.lib6.impl.cw.a(:com.google.android.gms.DynamiteModulesB:18)
at com.google.android.gms.maps.internal.t.onTransact(:com.google.android.gms.DynamiteModulesB:17)
at android.os.Binder.transact(Binder.java:387)
at com.google.android.gms.maps.internal.IMapViewDelegate$zza$zza.onCreate(Unknown Source)
at com.google.android.gms.maps.MapView$zza.onCreate(Unknown Source)
at com.google.android.gms.dynamic.zza$3.zzb(Unknown Source)
at com.google.android.gms.dynamic.zza$1.zza(Unknown Source)
at com.google.android.gms.maps.MapView$zzb.zzJy(Unknown Source)
at com.google.android.gms.maps.MapView$zzb.zza(Unknown Source)
at com.google.android.gms.dynamic.zza.zza(Unknown Source)
at com.google.android.gms.dynamic.zza.onCreate(Unknown Source)
at com.google.android.gms.maps.MapView.onCreate(Unknown Source)
I found a similar problem with Airbnb's react native map, but their solution does not seem relevant to my problem.
https://github.com/airbnb/react-native-maps/issues/1358
Any help or other ideas I could try out are much appreciated.
解决方案 You can try to use MapFragment instead of MapView because for updated google play services 11.0.55 not supporting MapView. I used MapView its worked for me.
Activity class:
private SupportMapFragment mMapFragment;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
//return inflater.inflate(R.layout.fragment_find_direction, container, false);
View view = inflater.inflate(R.layout.fragment_find_direction, null, false);
SupportMapFragment mapFragment = (SupportMapFragment) this.getChildFragmentManager()
.findFragmentById(R.id.map_fragment);
mMapFragment.getMapAsync(this);
mMapFragment = mapFragment;
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mMapFragment.onCreate(savedInstanceState);
}
Xml class:
<fragment
class="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/main_lay"
android:apiKey="@string/google_map_key"
android:clickable="true"
android:enabled="true"
android:focusable="true"
app:layout_collapseMode="parallax">
</fragment>
这篇关于MapView onCreate在LG设备上抛出NullPointerException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!