我的Xamarin Forms项目中有一个自定义地图渲染器,它没有任何问题。但是我间歇性地得到了下面列出的例外情况。
有谁能告诉我如何处理/解决这个问题?
[NullReferenceException:对象引用未设置为对象的实例。]
Xamarin.Forms.Maps.Android.MapRenderer.get_NativeMap():0
Xamarin.Forms.Maps.Android.MapRenderer.UpdateVisibleRegion(Android.Gms.Maps.Model.LatLng pos):0
Xamarin.Forms.Maps.Android.MapRenderer.OnCameraChange(Android.Gms.Maps.Model.CameraPosition pos):0
Android.Gms.Maps.GoogleMap + IOnCameraChangeListenerInvoker.n_OnCameraChange_Lcom_google_android_gms_maps_model_CameraPosition_(IntPtr jnienv,IntPtr native__this,IntPtr native_position):0 (包装器动态方法)System.Object:147fbd37-e0e3-4bcf-a8c6-a4d48c833aa4(intptr,intptr,intptr)
我发现这篇Bugzilla文章https://bugzilla.xamarin.com/show_bug.cgi?id=44174建议添加“null条件运算符”,但在哪里?
有关信息,我使用的是Xamarin.Forms.Maps的2.3.3.180版本
这是我的代码:
这是Droid渲染器
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Android.Content;
using Android.Gms.Maps;
using Android.Gms.Maps.Model;
using Android.Runtime;
using Android.Util;
using Android.Widget;
using MyProject.Mobile.Controls;
using MyProject.Mobile.Droid.Renderers;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
using Xamarin.Forms.Maps.Android;
[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))]
namespace MyProject.Mobile.Droid.Renderers
{
public class CustomMapRenderer : MapRenderer, GoogleMap.IInfoWindowAdapter, IOnMapReadyCallback
{
GoogleMap map;
public CustomMapRenderer() : base() { }
public CustomMapRenderer(IntPtr handle, JniHandleOwnership transfer) { }
public void OnMapReady(GoogleMap googleMap)
{
map = googleMap;
map.SetInfoWindowAdapter(this);
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
}
protected override void OnLayout(bool changed, int l, int t, int r, int b)
{
base.OnLayout(changed, l, t, r, b);
}
public Android.Views.View GetInfoContents(Marker marker)
{
var inflater = Android.App.Application.Context.GetSystemService(Context.LayoutInflaterService) as Android.Views.LayoutInflater;
if (inflater != null)
{
Android.Views.View view = null;
// Do something
return view;
}
return null;
}
public Android.Views.View GetInfoWindow(Marker marker)
{
return null;
}
}
}
这是
中的CustomMap类using Xamarin.Forms.Maps;
namespace MyProject.Mobile.Controls
{
public class CustomMap : Map
{
// Do something custom
}
}
这是Xmal中控件的实现
<controls:CustomMap x:Name="LocationMap"
IsShowingUser="true"
MapType="Street"
HorizontalOptions="FillAndExpand"
VerticalOptions="FillAndExpand"
HeightRequest="300"
WidthRequest="700">
</controls:CustomMap>