效果如下 网络访问的两种查看方式
我们来看代码下面来看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配置文件中设置网络访问权限