我需要将数据发布到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的替代方案吗?
答案 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)
我想在答案中添加一些内容,因为我不得不继续研究,发现一些信息可以帮助完成该问题的答案。
第二件事是您打开的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())
我希望拯救某人的生命。 :-)