Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Xamarin Android在Javascript和C之间的双向通信#_Xamarin_Xamarin.android - Fatal编程技术网

Xamarin Android在Javascript和C之间的双向通信#

Xamarin Android在Javascript和C之间的双向通信#,xamarin,xamarin.android,Xamarin,Xamarin.android,我正在使用Xamarin Android开发一个应用程序,它有一个显示网页的网络视图。我想实现Javascript从WebView到c#之间的双向通信。我可以用这个从Javascript调用C。然而,我找不到一种方法将数据从C#发送回Javascript。 在这种方法中是否有一种来回发送数据的方法。我原以为用Javascript编写回调就可以了,但如何从C#代码启动回调呢 现在,我的问题是如何从javascript接口类调用WebView。如前所述,我有一个Javascript接口类 名称空间扫

我正在使用Xamarin Android开发一个应用程序,它有一个显示网页的网络视图。我想实现Javascript从WebView到c#之间的双向通信。我可以用这个从Javascript调用C。然而,我找不到一种方法将数据从C#发送回Javascript。 在这种方法中是否有一种来回发送数据的方法。我原以为用Javascript编写回调就可以了,但如何从C#代码启动回调呢

现在,我的问题是如何从javascript接口类调用WebView。如前所述,我有一个Javascript接口类 名称空间扫描节点 { 公共类JSInterface:Java.Lang.Object { 语境; 网络视图

    public JSInterface (Context context, WebView webView1)
    {
      this.context = context;
      this.webView = webView1;
    }

    [Export]
    [JavascriptInterface]
    public void ShowToast()
    {
      Toast.MakeText (context, "Hello from C#", ToastLength.Short).Show ();
      this.webView.LoadUrl ("javascript:callback('Hello from Android Native');");

    }   
  }
}
代码在LoadUrl行.java.lang.Throwable处引发异常:在线程“thread-891”上调用了WebView方法。必须在同一线程上调用所有WebView方法。(预期的Looper-Looper(main,tid 1){42ce58a0}在null上调用,FYI main-Looper是Looper(main,tid 1){42ce58a0})


现在我正在努力从这个Java脚本接口类中引用WebView。是的。这是可能的。如果您的目标是KitKat或更高版本,您可以使用:

webView.EvaluateJavascript("enable();", null);
在本例中,
enable();
是一个JS函数

如果您的目标是较低的API级别,则可以使用
LoadUrl();

编辑:

它在
LoadUrl
上抱怨的错误是因为它出于某种原因发生在非UI线程上

由于您已经将
上下文
传递到JavascriptInterface类中,因此您可以简单地将
showtoos
的内容包装到:

context.RunOnUiThread(() => {
   // stuff here
});

只需将签名从
Context
更改为
Activity
,它将帮助您重新整理UI线程。

是的。这是可能的。如果您的目标是KitKat或更高版本,您可以使用:

webView.EvaluateJavascript("enable();", null);
在本例中,
enable();
是一个JS函数

如果您的目标是较低的API级别,则可以使用
LoadUrl();

编辑:

它在
LoadUrl
上抱怨的错误是因为它出于某种原因发生在非UI线程上

由于您已经将
上下文
传递到JavascriptInterface类中,因此您可以简单地将
showtoos
的内容包装到:

context.RunOnUiThread(() => {
   // stuff here
});

只需将签名从
Context
更改为
Activity
,它就可以帮助您将您封送回UI线程。

我的问题的可能重复的可能重复是谁从javascript接口类调用WebView。我有一个javascript接口类,如上所述,我不明白是什么“如何从javascript接口类调用WebView”是。你的意思是什么?Cheesebaron请参阅下面的详细信息。请编辑原始问题,而不是创建答案。我的问题是谁从javascript接口类调用WebView。我有一个javascript接口类,如前所述,我不明白是什么”如何从javascript接口类调用WebView“是。你是什么意思?Cheesebaron请参阅下面的详细信息。请编辑原始问题,而不是创建答案。