如何为WebView android发布数据

时间:2016-09-15 08:20:08

标签: android http-post android-webview

我需要将数据发布到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将数据发布到Android WebView的替代方案吗?

5 个答案:

答案 0 :(得分:34)

尝试如下...

 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());

答案 1 :(得分:5)

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

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");

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

答案 2 :(得分:3)

我想在答案中添加一些内容,因为我不得不继续研究,发现一些信息可以帮助完成该问题的答案。

  • 第一件事是需要这种情况。我需要的是 为android中的本机应用程序创建一个支付网关客户端。
  • 第二件事是您打开的URL需要执行一些操作 操作权。因此,您必须启用 webView 才能启用 这样的操作,否则可能无法正常工作。例如,如果您 URL正在执行某些Java脚本,因此必须启用Java脚本 用于您的网络视图。可以如下所示:

       val set = webview.settings
       set.javaScriptEnabled = true 
    

    通常,这将在您的Web视图中启用诸如计时器,返回结果等琐碎的事情。

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

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

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

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

    名称 Android 将作为名称注入到您的URL中,您可以从该URL调用android WebAppInterace的方法,如下所示:

    Android.showToast(“来自网页”)

  • 最后是您的postURL方法,它有点像:

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

    此方法具有一些默认情况。首先是将请求类型作为默认的 POST 作为建议的名称。

标题内容类型可以默认为application/x-www-form-urlencoded, 最重要的参数,它作为分隔的键值对,如下所示:

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

我们必须传递此字符串的byteArray,该字符串显示在帖子URL回调中。

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

>

我希望它可以帮助人们。

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

对于那些试图将html正文作为postData而不起作用的人, 尝试将您的弦线放在下面:

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

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

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

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