java - android.view.InflateException: Binary XML file line #6: Error inflating class com.google.android.gms.maps.MapView
问题描述
I was trying to implement a mapview in a fragment with viewpager but despite I tried many solutions, I couldn't find the correct one for my project.
Here is my logcat
2019-05-26 17:28:16.645 12469-12469/com.example.emrullah.booksharingappv4 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.emrullah.booksharingappv4, PID: 12469
android.view.InflateException: Binary XML file line #6: Binary XML file line #6: Error inflating class com.google.android.gms.maps.MapView
Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class com.google.android.gms.maps.MapView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:651)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:867)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
at android.view.LayoutInflater.inflate(LayoutInflater.java:519)
at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
at com.example.emrullah.booksharingappv4.Fragments.MapviewFragment.onCreateView(MapviewFragment.java:50)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:2243)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:654)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:146)
here is my fragment
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mapview_fragment, container, false);
mLocationList= new ArrayList<>();
mLocList= new ArrayList<>();
mLocList2= new ArrayList<>();
mRef=FirebaseDatabase.getInstance().getReference().child("users");
currentUser=FirebaseAuth.getInstance().getCurrentUser();
getLatLongFromDb();
split(mLocList);
mMapView = view.findViewById(R.id.map_view);
mMapView.onCreate(savedInstanceState);
mMapView.onResume();
try {
MapsInitializer.initialize(getActivity().getApplicationContext());
} catch (Exception e) {
e.printStackTrace();
}
//Gets the Googlemap from Mapview and does the initialization stuff
mMapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
for (int i = 0;i<mLocList2.size();i++){
LatLng sydney = new LatLng(mLocList2.get(i),mLocList2.get(i+1));
mMap.addMarker(new MarkerOptions().position(sydney).title("Book dest:"+(i+1)));
}
}
});
return view;
}
@Override
public void onResume() {
super.onResume();
if (mMapView != null)
mMapView.onResume();
}
@Override
public void onDestroy() {
super.onDestroy();
if (mMapView != null)
mMapView.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mMapView != null)
mMapView.onSaveInstanceState(outState);
}
}
Here is my xml file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.maps.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.emrullah.booksharingappv4.Fragments.MapviewFragment"
/>
</RelativeLayout>
And viewPager part in the Activity
public void setupViewPager(ViewPager viewPager) {
SectionPageAdapter sectionPageAdapter = new SectionPageAdapter(getSupportFragmentManager());
sectionPageAdapter.addFragment(new BookListFragment(), "BOOKS");
sectionPageAdapter.addFragment(new MapviewFragment(), "BOOK MAP");
sectionPageAdapter.addFragment(new SettingsFragment(), "SETTINGS");
viewPager.setAdapter(sectionPageAdapter);
}
public void setUpTabIcons(){
tabLayout.getTabAt(0).setIcon(navIcons[0]);
tabLayout.getTabAt(1).setIcon(navIcons[1]);
tabLayout.getTabAt(2).setIcon(navIcons[2]);
}
I know there are some similar questions like mine but I tried all of them and none of them worked. Thanks for the help.
解决方案
您正在尝试使用 Android 版 Google 地图支持的原始版本 (com.google.android.maps)。我们现在将其称为 Maps V1。
这将不起作用,因为 Maps V1 已被弃用超过 4 年。您无法再获得它的 API 密钥,因此即使您的代码是正确的,它也不会工作。崩溃是因为旧的 MapView 必须在 MapActivity 中使用,如错误所示。
当前支持 Android 的 Google Maps 版本 - Maps V2 - 具有非常不同的 API,并且不涉及 com.google.android.maps 包中的类。
请从官方文档中阅读如何使用 Maps V2
推荐阅读
- javascript - 使用自定义钩子提供的数据测试 React 组件
- reactjs - 使用 React 的 Asp.NET Core - UTF8 无法识别
- c++ - 重载 << 运算符:带有结构向量的结构
- linux - 如何在 Bash 中扩展数组,为元素添加双引号?
- java - 数字的大小打印
- javascript - SQLite3 Javascript | 更改数据库中每一行的数据
- ocaml - 未绑定模块标准库
- ios - 如何在逐步导航中找出重新路由的数量?
- android - 无法为 org.gradle.api.internal.initialization.DefaultScriptHandler 类型的对象获取未知属性“PrivateData”
- c++ - “gpu/mxGPUArray.h”文件的路径在哪里?