Android web交互方式

Android web交互方式

第一、Android获取web特定内容

  • (1)使用三方工具Jsoup来抓取标签数据
  • 使用方法:获取整个页面-> 抓取特定的标签节点->获取里面的值

例子:

Document document = Jsoup.connect(url).get();
if(document.select("#share_title").size() > 0){
htmlInputBean.setTitle(document.select("#share_title").get(0).attr("value"));
}
  • (2)弊端:
  • 此方法只能获取页面静态加载的数据

例子;页面加载过程中获取接口数据加载到页面中,这类型的数据获取不到。

  • (3)赋值
  • 使用方法:获取整个页面->抓取特定的标签节点->赋予特定的值

例子:

Document document = document.connect(url).get();
//通过类名获取到一组Elements,获取一组中第一个element并设置其html
Elements elements = document.getElementsByClass("loadDesc");
elements.get(0).html("<p>加载完成</p>");

//通过ID获取到element并设置其src属性
Element element = document.getElementById("imageView");
element.attr("src","file:///android_asset/dragon.jpg");

//通过类名获取到一组Elements,获取一组中第一个element并设置其文本
elements = document.select("p.hint");
elements.get(0).text("您好,我是龙猫军团!");

//获取进行处理之后的字符串并重新加载
String body = document.toString();
webView.loadDataWithBaseURL(null, body, "text/html", "utf-8", null);

第二、Android调用web特定方法

  • (1)通过webview.loadUrl javascript来调用页面中写

例子:

这是网页代码
<html>  
<head>  
........
<script>  
   function showMsg(){  
      alert("hello world!");  
   }  
function showHelp(){  
      alert("我是帮助回调");  
   }  
........
   </script>  
</head>  
<body> 
........

这是Android调用方式
mBtn1.setOnClickListener(new View.OnClickListener() {  
   @Override  
   public void onClick(View v) {  
       mWebView.loadUrl("javascript:showMsg()");  
   }  
});  

- (2)webview中注入javascript
- (1)将js文件转成字符串,在页面加载完成后,注入文件
- (2)向页面中添加<script>标签,注入js文件

第一种:

URL url = new URL("http://www.rayray.ray/ray.js");
in = url.openStream();
byte buff[] = new byte[1024];
ByteArrayOutputStream fromFile = new ByteArrayOutputStream();
FileOutputStream out = null;
do {
       int numread = in.read(buff);
       if (numread <= 0) {
         break;
         }
        fromFile.write(buff, 0, numread);
     } while (true);
String wholeJS = fromFile.toString();

@Override
public void onPageFinished(WebView view, String url) 
 {
        super.onPageFinished(view, url);
         webview.loadUrl("javascript:" + wholeJS);
 }

第二种:

String js = "var newscript = document.createElement(\"script\");";
js += "newscript.src=\"http://www.123.456/789.js\";";
js += "newscript.onload=function(){xxx();};";  //xxx()代表js中某方法
js += "document.body.appendChild(newscript);";

@Override
 public void onPageFinished(WebView view, String url) 
  {
       super.onPageFinished(view, url);
        webview.loadUrl("javascript:" + js);
  }

第三、web获取Android特定内容

暂无

第四、web调用Android特定方法

  • 将要被web调用的方法封装到指定的类中,将方法注入JavascriptInterface,最后在加载时,添加到webview中。

例子:

原生代码

public class JavaScriptObject {  
    Context mContxt;  
    @JavascriptInterface //sdk17版本以上加上注解  
    public JavaScriptObject(Context mContxt) {  
        this.mContxt = mContxt;  
    }  

    public void fun1FromAndroid(String name) {  
        Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show();  
    }  

    public void fun2(String name) {  
        Toast.makeText(mContxt, "调用fun2:" + name, Toast.LENGTH_SHORT).show();  
    }  
}


   @Override  
   protected void onCreate(Bundle savedInstanceState) {  
       super.onCreate(savedInstanceState);  
       setContentView(R.layout.activity_main);  
       //初始化  
       initViews();  

       //设置编码  
       mWebView.getSettings().setDefaultTextEncodingName("utf-8");  
       //支持js  
       mWebView.getSettings().setJavaScriptEnabled(true);  
       //设置背景颜色 透明  
       mWebView.setBackgroundColor(Color.argb(0, 0, 0, 0));  
       //设置本地调用对象及其接口  
       mWebView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");  
       //载入js  
       mWebView.loadUrl("file:///android_asset/test.html");  

   }  

web代码

<body>  
    <a>js中调用本地方法</a>  
    <script>  

    function funFromjs(){  
        document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";  
    }  
    var aTag = document.getElementsByTagName('a')[0];  
    aTag.addEventListener('click', function(){  
        //调用android本地方法  
        myObj.fun1FromAndroid("调用android本地方法fun1FromAndroid(String name)!!");  
        return false;  
    }, false);  
    </script>  
    <p></p>  
    <div id="helloweb">   

    </div>  
</body>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值