0

我有一个基本问题,我无法真正理解问题的根源。我正在通过 xamarin.android webview 设计一个项目。现在我需要在 Web 视图中运行 Java 函数并检查 if 函数中的返回值。我搜索了所有网站,在所有网站中,我得到了以下代码:在主活动类中:

public class MainActivity : AppCompatActivity
{
    WebView web_view;
.
.
.

在类中定义 web_view public

在 OnCreate :

protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.activity_main);
        web_view = FindViewById<WebView>(Resource.Id.webview);
        web_view.Settings.JavaScriptEnabled = true;
        web_view.Settings.BuiltInZoomControls = true;
        web_view.Settings.AllowContentAccess = true;
        web_view.SetWebViewClient(new HelloWebViewClient());
        
        web_view.LoadUrl("https://www.example.com");
        
    }

在返回键按下:

public override bool OnKeyDown(Android.Views.Keycode keyCode, Android.Views.KeyEvent e)
    {
        if (keyCode == Keycode.Back)
                {       
                        if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat)
                        {
                            JavascriptResult jsr = new JavascriptResult();
                            string strjs = "closePackageDetails();";
                            web_view.EvaluateJavascript(strjs, jsr);
                            string rrr = jsr.strResult;
                            Toast.MakeText(this, "message send:" + rrr, ToastLength.Long).Show();
                            
                    }
                        else
                        {
                            Toast.MakeText(this, "android version less 4.4" , ToastLength.Long).Show();
                        }
        }
    }

在 JavascriptResult 类上(在根目录中 MainActivity 中的 C# 类中分开)

    namespace webviewapp
{
    class JavascriptResult : Java.Lang.Object, IValueCallback
    {
        public string strResult;

        public void OnReceiveValue(Java.Lang.Object result)
        {
            Toast.MakeText(Android.App.Application.Context, "رسیدن نتیجه احضار شد", ToastLength.Long);
            strResult = ((Java.Lang.String)result).ToString();
        }
    }
}

<> 一切正常,程序调试无误,APK文件创建成功。在手机上安装程序并运行后,网页加载完毕,一切正常。通过触摸后退按钮,JavaScript 函数被正确执行,结果在 Web 视图中可见。但结果是布尔值,不会返回。事实上,OnReceiveValue 过程不起作用。

变量 'rrr' 始终显示空值。

哪里出了问题真的让我很困惑?

4

1 回答 1

0

发生这种情况是因为比下一行callback执行later,所以变量'rrr'总是null

添加断点OnReceiveValuestring rrr = jsr.strResult;检查它的行。

OnReceiveValue只需直接在回调类中的方法中进行下一步操作即可。

于 2022-01-25T09:09:36.857 回答