MapView onCreate在LG设备上抛出NullPointerException [英] MapView onCreate throws NullPointerException on LG devices

查看:152
本文介绍了MapView onCreate在LG设备上抛出NullPointerException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,这个问题对我来说只适用于运行Android 6的LG设备(LG G4和G5)。这个问题是通过谷歌播放服务的最新更新引入的。如果我手动降级我的LG设备上的谷歌播放服务,错误消失了。不幸的是,我不能告诉我的用户这样做,所以我需要找到另一种解决方案。由于这个错误可以在Play商店的应用程序中重现,我可以肯定的是,错误不是通过我自己的代码更改引入的。



通过调用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆