如何 post WebView 的数据 android

How to post data for WebView android

我需要 post 数据到 Webview。
我从一些链接中找到了以下代码:

 WebView webview = new WebView(this);
 setContentView(webview);
 String url = "http://www.example.com";
 String postData = username=my_username&password=my_password";
 webview.postUrl(url",EncodingUtils.getBytes(postData, "BASE64"));

但在我的 android 工作室中,我发现 EncodingUtils 已弃用
谁能帮我 EncodingUtils 到 post 数据到 Android WebView 的替代方法是什么?

试试这个: 您需要在发送前对参数值进行URL编码。

String postData = "fileContents=" + URLEncoder.encode(fileCon, "UTF-8");

像下面这样尝试...

Java:

 WebView webview = new WebView(this);
 setContentView(webview);

 String url = "http://www.example.com";

 String postData = "username=" + URLEncoder.encode(my_username, "UTF-8") + "&password=" + URLEncoder.encode(my_password, "UTF-8");
 webview.postUrl(url,postData.getBytes());

科特林:

val webview = WebView(this)
setContentView(webview)

val url = "http://www.example.com"

val postData = "username=${URLEncoder.encode(my_username, "UTF-8")}" +
"&password=${URLEncoder.encode(my_password, "UTF-8")}"
webview.postUrl(url, postData.toByteArray())

这是一个简单的解决方法。

String html = "<!DOCTYPE html>" +
    "<html>" +
    "<body onload='document.frm1.submit()'>" +
    "<form action='http://www.yoursite.com/postreceiver' method='post' name='frm1'>" +
    "  <input type='hidden' name='foo' value='12345'><br>" +
    "  <input type='hidden' name='bar' value='23456'><br>" +
    "</form>" +
    "</body>" +
    "</html>";
webview.loadData(html, "text/html", "UTF-8");

我知道这不是最好的方法,但它确实有效。

我想在答案中添加一些内容,因为我必须处理相同的问题并发现一些信息可以帮助完成这个问题的答案。

  • 首先是需要这样的场景。我的需要是我是 在 android.
  • 中为本机应用程序创建支付网关客户端
  • 其次,您打开的 URL 需要执行一些操作 操作正确。因此,您必须启用 webView 才能启用 这样的操作否则事情可能无法正常工作。例如,如果您的 URL 正在执行一些 java 脚本,您必须启用 java 脚本 对于您的 webview。这可以如下所示完成:

       val set = webview.settings
       set.javaScriptEnabled = true 
    

    通常这会在您的 webview 上启用诸如计时器、returning 结果等琐碎的事情。

  • 第三种情况是您的 webView 需要调用 android 应用程序的方法。这可以通过添加一些 JavaScript 界面来完成,如下所示:

        webview.addJavascriptInterface(WebAppInterface(), "Android")
    

    其中 WebAppInterface() 是一个简单的 class,至少有一个方法用 @JavascriptInterface 注释,如下所示:

    class WebAppInterface() {
    
        @JavascriptInterface
        fun showToast(status: String) {
            //show toast here or handle status
        }
    }
    

    名称 Android 将作为变量注入到您的 URL 中,您可以调用 android 来自 URL 的 WebAppInterace,如下所示:

    Android.showToast("From WebPage")

  • 最后一件事是您的 postURL 方法,有点像:

        webview.postUrl(actionUrl, params.toByteArray(Charsets.UTF_8))
    

    此方法有几项默认设置。首先是请求类型默认为 POST 顾名思义。

Header content-type 可以默认为application/x-www-form-urlencoded和 最重要的参数是 & 分隔的键值对,如图所示:

        val params = "MERCHANT_ADDR=" + addr + "&CHANNEL=android"

我们必须传递 post URL 回调中显示的此字符串的 byteArray。

现在,在您的 API 被点击并且在某些情况下加载回调 url 后,使用 JavaScript 接口从该回调 URL 中,您可以 return 结果到您的应用程序并关闭 webview.

希望对大家有所帮助。

对于那些通过尝试将 html 正文作为 postData 而无法工作的人来说, 尝试将您的字符串主体放在下面:

    val htmlCode = "https://ramdom.user.me"

    val postData = "{\n" +
            "\t\"token\": \"963966f649\"\n" + "}"

    webview.postUrl(htmlCode, postData.toByteArray())

我希望能挽救某人的生命。 :-)