【问题标题】:How to post data for WebView android如何为 WebView android 发布数据
【发布时间】:2016-09-15 08:20:07
【问题描述】:

我需要将数据发布到 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 的替代方法是什么?

【问题讨论】:

    标签: android http-post android-webview


    【解决方案1】:

    试试下面...

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

    【讨论】:

    • 对于 Kotlin 使用 toByteArray 而不是 getBytes
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

           val set = webview.settings
           set.javaScriptEnabled = true 
        

        通常这会在您的 webview 上启用一些琐碎的事情,例如计时器、返回结果等。

      • 第三件事是当您的 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,它会在 post URL 回调中显示。

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

      我希望它对人们有所帮助。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 如何传递用户名、密码??
        • 您可以执行“postvar=value&foo=bar”之类的操作。让我知道这是否适合您。
        • 你的意思是:String postdata = username=+URLEncoder.encode(my_username,"UTF-8") & password=+URLEncoder.encode(my_password,"UTF-8"); webview.postUrl(url",postdata);
        【解决方案5】:

        对于那些试图将 html 正文作为 postData 并不起作用的人, 尝试将您的字符串主体如下所示:

            val htmlCode = "https://ramdom.user.me"
        
            val postData = "{\n" +
                    "\t\"token\": \"963966f649\"\n" + "}"
        
            webview.postUrl(htmlCode, postData.toByteArray())
        

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

        【讨论】:

          猜你喜欢
          • 2013-10-16
          • 2012-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-06
          • 2021-09-17
          相关资源
          最近更新 更多