android - 空指针异常 mapview.onResume
问题描述
我有以下空指针异常
此代码用于工作,但我将 GMS 库升级为 androidx 库
binding.mapView.onResume()
2019-07-11 11:35:05.873 10868-10868/myapp I/DynamiteModule: Considering local module com.google.android.gms.maps_dynamite:0 and remote module com.google.android.gms.maps_dynamite:221
2019-07-11 11:35:05.873 10868-10868/myapp I/DynamiteModule: Selected remote version of com.google.android.gms.maps_dynamite, version >= 221
2019-07-11 11:35:05.935 10868-10868/myapp W/zygote: Skipping duplicate class check due to unrecognized classloader
2019-07-11 11:35:05.998 10868-10868/myapp I/Google Maps Android API: Google Play services client version: 12451000
2019-07-11 11:35:06.016 10868-10868/myapp I/Google Maps Android API: Google Play services package version: 17785018
2019-07-11 11:35:06.216 10868-10868/myapp D/AndroidRuntime: Shutting down VM
2019-07-11 11:35:06.221 10868-10868/myapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: myapp, PID: 10868
java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bt.o()' on a null object reference
at com.google.maps.api.android.lib6.impl.de.b(:com.google.android.gms.dynamite_mapsdynamite@17785047@17.7.85 (040308-253824076):15)
at com.google.android.gms.maps.internal.t.a(:com.google.android.gms.dynamite_mapsdynamite@17785047@17.7.85 (040308-253824076):37)
at hp.onTransact(:com.google.android.gms.dynamite_mapsdynamite@17785047@17.7.85 (040308-253824076):4)
at android.os.Binder.transact(Binder.java:604)
at com.google.android.gms.internal.maps.zza.zzb(Unknown Source:20)
at com.google.android.gms.maps.internal.zzk.onResume(Unknown Source:20)
at com.google.android.gms.maps.MapView$zza.onResume(Unknown Source:21)
at com.google.android.gms.dynamic.zag.zaa(Unknown Source:3)
at com.google.android.gms.dynamic.zaa.onDelegateCreated(Unknown Source:4)
at com.google.android.gms.maps.MapView$zzb.createDelegate(Unknown Source:16)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.zaa(Unknown Source:18)
at com.google.android.gms.dynamic.DeferredLifecycleHelper.onResume(Unknown Source:56)
at com.google.android.gms.maps.MapView.onResume(Unknown Source:32)
at myapp.RoomFragment.onResume(RoomFragment.kt:291)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2644)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:922)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1881)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1827)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6694)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)
任何机构都可以提供有关正在发生的事情的任何线索吗?
解决方案
这些是您需要检查的事项:
确保你拥有这两个(我只有 api 密钥元数据)
<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_key" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
2.您在xml中有一个这样的片段,其类属性正确,如下所示
<fragment
android:id="@+id/google_map_fragment"
class="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
在我的情况下,地图片段是一个孩子,在另一个片段中。
这个父片段显然不应该是 MapFragment 或 SupportMapFragment。将其从 SupportMapFragment 更改为 Fragment 后,地图显示非常好。
public class ParentFragment extends Fragment {
现在,如果您使用的是片段,那么试试这个,--> 我没有在 onCreateView 中获取地图,而是在 onViewCreated 中获取它,如下所示:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.rewards_google_map_area);
if (mapFragment != null) {
LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
if (locationManager != null && mapFragment.getMap() != null) {
googleMap=mapFragment.getMap();
//after this you do whatever you want with the map
}
}
}
推荐阅读
- bash - 从 WSL 会话内部关闭或重新启动 WSL 会话
- c# - 从方法访问类项
- laravel - Laravel 数据迁移的推荐/标准处理
- spring-boot - Spring Boot Hibernate 没有获取 use-new-id-generator-mappings 属性
- python - 使用 chunksize 从 s3 将 CSV 文件加载到 Pandas
- angular - Angular - 管道和 elvis 运算符 (?) 导致更快地调用 getter
- nginx - NGINX 背后的 Kubectl 代理:无效的升级响应
- javascript-automation - JXA '无法转换类型'
- pytorch - 无法使用 transforms.Resize 重新缩放图像
- laravel - Laravel 合集搜索