Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中从webview获取html内容(使用Xamarin和C#)_C#_Android_Mobile_Xamarin_Webview - Fatal编程技术网

在Android中从webview获取html内容(使用Xamarin和C#)

在Android中从webview获取html内容(使用Xamarin和C#),c#,android,mobile,xamarin,webview,C#,Android,Mobile,Xamarin,Webview,我想做的基本上就是这里的答案: 然而,我正在用C#与Xamarin合作,上面答案中给出的代码是用java编写的。我试着把它翻译成C#,如下所示: public class LoginWebViewController : Activity { WebView localWebView; protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedI

我想做的基本上就是这里的答案:

然而,我正在用C#与Xamarin合作,上面答案中给出的代码是用java编写的。我试着把它翻译成C#,如下所示:

  public class LoginWebViewController : Activity
{
    WebView localWebView;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        SetContentView(Resource.Layout.WebView);

        localWebView = FindViewById<WebView>(Resource.Id.LocalWebView);
        localWebView.SetWebViewClient(new JustWebViewClient());

        localWebView.LoadUrl(LoginOperations.GetTPLoginUrl());

        localWebView.Settings.JavaScriptEnabled = true;
        localWebView.AddJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");


    }

    class MyJavaScriptInterface
    {
        private Context ctx;

        MyJavaScriptInterface(Context ctx)
        {
            this.ctx = ctx;
        }

        public void showHTML(String html)
        {
            Console.WriteLine(html);
        }

    }
}
公共类登录WebViewController:活动
{
网络视图本地网络视图;
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.WebView);
localWebView=findviewbyd(Resource.Id.localWebView);
SetWebViewClient(新的JustWebViewClient());
localWebView.LoadUrl(LoginOperations.GetTPLoginUrl());
localWebView.Settings.JavaScriptEnabled=true;
AddJavascriptInterface(新的MyJavaScriptInterface(this),“HtmlViewer”);
}
类MyJavaScriptInterface
{
私有上下文ctx;
MyJavaScriptInterface(上下文ctx)
{
this.ctx=ctx;
}
公共void showHTML(字符串html)
{
Console.WriteLine(html);
}
}
}
但我得到了以下错误:

我尝试将类更改为public,但仍然会出现相同的错误。怎么了

附加代码:

 public class MyWebViewClient : WebViewClient
{
    public override void OnPageFinished(WebView view, String url)
    {
        base.OnPageFinished(view,url);

        Console.WriteLine("DONE LOADING PAGE");

        view.LoadUrl("javascript:HtmlViewer.showHTML" +
                "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");


    }
}
公共类MyWebViewClient:WebViewClient
{
公共覆盖无效OnPageFinished(WebView视图,字符串url)
{
base.OnPageFinished(视图、url);
Console.WriteLine(“完成加载页”);
view.LoadUrl(“javascript:HtmlViewer.showHTML”+
(“”+document.getElementsByTagName('html')[0].innerHTML+“”);”;
}
}

您的构造函数不是公共的,您必须从
Java.Lang.Object
继承。您还必须添加
Export
属性

class MyJavaScriptInterface : Java.Lang.Object
{
    private Context ctx;

    public MyJavaScriptInterface(Context ctx)
    {
        this.ctx = ctx;
    }

    public MyJavaScriptInterface(IntPtr handle, JniHandleOwnership transfer)
        : base (handle, transfer)
    {
    }

    [Export("showHTML")]
    public void showHTML(string html)
    {
        Console.WriteLine(html);
    }
}
在javascript代码中也有一个错误。您缺少一个开头
showHTML
之后的

view.LoadUrl("javascript:HtmlViewer.showHTML(" + ...

感谢您的帮助。对于以下内容,您可能需要在此处使用ExportAttribute或ExportFieldAttribute时添加对Mono.Android.Export.Dll的引用