未处理的异常:Android.Views.充气异常:二进制XML文件行#1:二进制XML文件列#1:充气类片段时出错



我正在尝试将谷歌地图集成到Xamarin Android。然而,收到了标题中所写的错误。此错误出现在我的SetContentView(Resource.Layout.Main)上如下所示,其中:

MainActivity.cs 中发生错误

我的谷歌地图播放服务是最新的。我尝试过清理和重建项目,也重新启动VS对我来说不起作用。没有论坛回答我的问题。

这些是在我的项目中写的:

MainActivity.cs

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Gms.Maps;
namespace Google_maps.Droid
{
[Activity (Label = "@string/Google_maps.Android", MainLauncher = true, Icon = "@drawable/icon")] 
public class MainActivity : Activity, IOnMapReadyCallback
{
private GoogleMap mMap;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
// Set our view from the "main" layout resource
SetContentView (Resource.Layout.Main);
SetUpMap();
}
private void SetUpMap()
{
if (mMap == null)
{
FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);
}
}
public void OnMapReady(GoogleMap googleMap)
{
mMap = googleMap;
}
}
}

Main.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>

</LinearLayout>

Strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Click Me!</string>
<string name="app_name">Google_maps.Android</string>
<string name="google_maps_key">my_API_key</string>
<string name="Google_maps.Android">Google maps</string>
</resources>

最后,

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Google_maps.google_mapsAndroid" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="15" />
<application android:label="Google_maps.Android" android:icon="@drawable/Icon">
<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
<meta-data android:name="com.google.android.maps.V2.API_KEY" android:value="@string/google_maps_key" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
</manifest>

关于更多信息,我遵循了youtuber的一个方法,Joe Rock,他在那里教我们如何设置谷歌地图。这是他的视频链接:

https://www.youtube.com/watch?v=W6Q0olRPsus

如果你往下看评论区,你会发现很多其他人也有同样的问题。这段视频是两年前制作的,所以我理解为什么在目前的情况下它不起作用。然而,如果你们能启发我如何将谷歌地图集成到我的android移动应用程序中,如果这种方法不再可靠,我将不胜感激。提前谢谢。

问候,Xamarin和编程新手。

编辑:

当我将鼠标拖动到SetContentView (Resource.layout.Main)时,它会显示void Activity.SetContentView(int LayoutResID)(+2个重载)在布局资源上设置活动内容

我应该关心这个吗?

所以我的项目无法打开,在这种情况下,我必须从头开始重新创建我的项目。我已经对我的模拟器进行了更改,我认为这可能一直是问题所在,并设法使其正常工作,并删除了标题上的错误。

尽管如此,目前也是唯一的问题是,它只在左下角显示"谷歌"标志,但没有地图。我可能应该在另一个线程中写这个?既然现在情况不同了。

但到目前为止,错误被删除了,我相信,设备和安卓版本在这方面发挥了重要作用。

编辑:

大家好,我已经设法让谷歌地图在我的应用程序上完全工作。正如我之前所说,"设备和安卓版本在开发应用程序中发挥着重要作用"。仅供参考,我使用的是安卓7.1版(Nougat),Nexus 5设备,谷歌API x86-nenenebb API 25。

  1. 在属性>>应用程序中将编译器设置为8.0(奥利奥),并在属性>>安卓清单中将目标设置为"使用SDK版本编译"。

  2. Xamarin股份有限公司将您的GoogleMaps软件包从工具中的NuGet软件包管理器更新到最新稳定版本。我目前最新的稳定版本是42.1021.1。

  3. Xamarin股份有限公司将您的Xamarin.Android.Support.Compat从工具中的Nuget软件包管理器更新到最新稳定版本。我目前最新的稳定版本是26.0.2。若片段库并没有随之更新,只需手动更新即可。

  4. 我添加了可能丢失的权限,如下所示:

<permission android:name="googleMapsProject.googleMapsProject.droid.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
	<uses-permission android:name="com.deg.blubcnmobl.droid.permission.MAPS_RECEIVE" />

仅供参考googleMapsProject.googleMapsProject是您的软件包名称。确保它不是以大写字母开头,并且与你在谷歌控制台的密钥限制页面中写的包名称匹配。

  1. 所有这些都在谷歌地图API的v2上运行

我就是这么做的。希望这能有所帮助!

尝试:

更改:

<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"/>

收件人:

<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/> 

此外,在您的SetUpMap()方法中更改如下:

FragmentManager.FindFragmentById<MapFragment>(Resource.Id.map).GetMapAsync(this);

用于:

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

1.从Nuget 安装Appcompact dll

2.使用AppCompatActivity而不是Activity

3.在属性下的AndroidManifest中添加以下权限

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER"/>
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

4.在您的main.axml 中添加以下xml

<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />

5.在resource/values/styles下的styles.xml中添加以下代码:

<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="colorPrimary">#FFCC01</item>
<item name="colorPrimaryDark">#E69D02</item>
<item name="colorControlHighlight">#FFCC01</item>
<item name="colorAccent">#D5012A</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="DrawerArrowStyle" 
parent="@style/Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@color/colorRedText</item>
</style>
<style name="MyTheme" parent="MyTheme.Base">
</style>

6.通过在AndroidManifest.xml文件中添加以下行,将我的主题作为您的默认应用程序主题,您可以在当前android项目下方的项目属性下找到该文件。

<application android:label="YourAppName" android:theme="@style/MyTheme" android:hardwareAccelerated="true" android:largeHeap="true" android:icon="@drawable/YourAppIcon">

如果你什么都不懂,你可以简单地在这里查看:

https://developer.xamarin.com/guides/android/platform_features/maps_and_location/

还要检查你的AndroidSdk中是否有Google play服务,你可以在VS-15工具>Android>AndroidSbk的工具栏中找到在Extras下安装Google Play服务。

最新更新