调用NativeMap getter

时间:2017-02-16 16:18:37

标签: xamarin.android xamarin.forms

我的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>

0 个答案:

没有答案