如何解决Xamarin Forms:使用 Webview 显示 PDF 文件的问题
以下是我的渲染器代码:
主要项目:
<bit>
安卓:
public class PdfWebView : WebView
{
public static readonly BindableProperty UriProperty = BindableProperty.Create(propertyName: "Uri",returnType: typeof(string),declaringType: typeof(PdfWebView),defaultValue: default(string));
public string Uri
{
get { return (string)GetValue(UriProperty); }
set { SetValue(UriProperty,value); }
}
}
Xaml 和 Xaml.cs:
[assembly: ExportRenderer(typeof(PdfWebView),typeof(MyWebVieWrenderer))]
namespace Projectname.Droid.Renderer
{
public class MyWebVieWrenderer : WebVieWrenderer
{
public MyWebVieWrenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var customWebView = Element as PdfWebView;
Control.Settings.AllowUniversalAccessFromFileURLs = true;
Control.Settings.JavaScriptEnabled = true;
Control.LoadUrl(string.Format("https://drive.google.com/viewerng/viewer?url={0}",customWebView.Uri.ToString()));
}
}
}
}
但是当我在 android 平台上运行该应用程序时出现以下异常:
System.NullReferenceException: '未将对象引用设置为对象的实例。'
ios 部分没有使用渲染器,pdf 在那里工作正常。 android 部分的实际问题是什么?
解决方法
对渲染器进行了以下修改。从我自己的 thread 那里得到了这个解决方案。
public class MyWebViewRenderer : WebViewRenderer
{
PdfWebView customWebView;
public MyWebViewRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if (Control != null)
{
customWebView = Element as PdfWebView;
Control.Settings.AllowUniversalAccessFromFileURLs = true;
Control.Settings.JavaScriptEnabled = true;
if (customWebView.Uri != null)
{
Control.LoadUrl(string.Format("https://drive.google.com/viewerng/viewer?url={0}",customWebView.Uri.ToString()));
}
}
}
protected override void OnElementPropertyChanged(object sender,PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender,e);
if (customWebView.Uri != null && !Control.Url.Contains(customWebView.Uri))
{
Control.LoadUrl(string.Format("https://drive.google.com/viewerng/viewer?url={0}",customWebView.Uri.ToString()));
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。