博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Webview访问移动网络的两种方法
阅读量:6852 次
发布时间:2019-06-26

本文共 5104 字,大约阅读时间需要 17 分钟。

效果如下 网络访问的两种查看方式

网页刷新的比较慢
我们来看代码

下面来看activity的代码

public class Lookwebpage extends Activity {
private WebView webview; private TextView textView; StringBuilder sBuilder = null; Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { if(msg.what==1){ String codeStr=(String) msg.obj; textView.setVisibility(View.VISIBLE); textView.setText(codeStr); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.lookwebpage); webview = (WebView) findViewById(R.id.page_view); textView = (TextView) findViewById(R.id.code_tv); } // 查看网页 public void viewpage(View view) { webview.loadUrl("http://blog.csdn.net/tangsilian/article/details/51212193"); webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); // 返回true则表明使用的是WebView return true; } }); textView.setVisibility(View.INVISIBLE); webview.setVisibility(View.VISIBLE); } // 查看源码 public void viewcode(View view) { // textView.setText(text); Runnable runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { URL url = new URL("http://blog.csdn.net/tangsilian?viewmode=contents"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setReadTimeout(5000); connection.setRequestMethod("GET"); if(connection.getResponseCode()==200){ InputStream is = connection.getInputStream(); byte[] data=StreamUtil.parseInputStream(is); String result=new String(data, "UTF-8"); Message message=new Message(); message.obj=result; message.what=1; handler.sendMessage(message); } }catch(Exception e){ e.printStackTrace(); } } }; new Thread(runnable).start(); }}

主要看两个点击事件

// 查看网页    public void viewpage(View view) {        webview.loadUrl("http://blog.csdn.net/tangsilian/article/details/51212193");        webview.setWebViewClient(new WebViewClient() {            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                view.loadUrl(url);                // 返回true则表明使用的是WebView                return true;            }        });        textView.setVisibility(View.INVISIBLE);        webview.setVisibility(View.VISIBLE);    }

用网页查看的代码,主要是这一句

webview.loadUrl("http://blog.csdn.net/tangsilian/article/details/51212193");

查看源码的方法,新启动一个线程来处理从网页上接受到的数据

public void viewcode(View view) {        // textView.setText(text);        Runnable runnable = new Runnable() {            @Override            public void run() {                // TODO Auto-generated method stub                try {                    URL url = new URL("http://blog.csdn.net/tangsilian?viewmode=contents");                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    connection.setReadTimeout(5000);                    connection.setRequestMethod("GET");                    if(connection.getResponseCode()==200){                        InputStream is = connection.getInputStream();                        byte[] data=StreamUtil.parseInputStream(is);                        String result=new String(data, "UTF-8");                        Message message=new Message();                        message.obj=result;                        message.what=1;                        handler.sendMessage(message);                    }                    }catch(Exception e){                        e.printStackTrace();                    }                }        };        new Thread(runnable).start();    }

先用HttpURLConnection连接,收到连接成功的返回码200之后,发送message到主线程的message队列,再交给主线程的handlemessage来处理。

工具类StreamUtil的代码

public class StreamUtil {
/**把输入流转为字节数组 * * @param is * @return */ public static byte[] parseInputStream(InputStream is) throws Exception{ // TODO Auto-generated method stub // 内存流, 字节数组输出流 ByteArrayOutputStream baos=new ByteArrayOutputStream(); byte[] buffer=new byte[1024]; int len=-1; while((len=is.read(buffer))!=-1){ //当没有到文档的结尾 baos.write(buffer, 0, len); } baos.close();//内存流关闭后,还可以访问,只是不能再添加数据 is.close(); return baos.toByteArray(); }}

工具类就是将输入流转化为字节数组的。

最后不来忘了在 manifest配置文件中设置网络访问权限

转载于:https://www.cnblogs.com/Tesi1a/p/7624145.html

你可能感兴趣的文章
【WinForm】创建自定义控件
查看>>
c++重新抛出异常
查看>>
dedecms 安装完成后登录后台出现空白
查看>>
HBase vs. BigTable Comparison
查看>>
JS:2.1,流程控制(if,switch)高级
查看>>
android native c 的so调试
查看>>
PHP 单一入口框架设计简析
查看>>
boost.asio系列——io_service
查看>>
Android 编程下如何获取有 Internet 访问权限的应用
查看>>
云计算里AWS和Azure的探究(6) - Amazon Simple Storage Service 和 Microsoft Azure Blob Storage
查看>>
流行趋势:27个引领时尚的网页设计作品【上篇】
查看>>
(visual)c++ 内存分配
查看>>
反射 简单工厂模式
查看>>
Linux学习之CentOS(一)--CentOS6.4环境搭建
查看>>
SQL Server 2008 R2 附加数据库错误
查看>>
《CLR via C#》读书笔记 之 运行时序列化
查看>>
Asp.Net 用Jquery和一般处理程序实现无刷新上传大文件
查看>>
黄聪:如何在Windows上安裝BeautifulSoup
查看>>
Use C# to get JSON Data from the Web and Map it to .NET Class => Made Easy! 转
查看>>
玩转SSRS第三篇---丰富你的报表
查看>>