网路编程(网站源码查看器)

news/2024/5/20 10:48:18/文章来源:https://blog.csdn.net/weixin_34293911/article/details/94149668

一、网页源码查看器

1.shift+F2调用httpwatch(为网页抓包数据分析工具【需下载】):

2.HttpURLConnection:用于发送和接收数据

3.必须有联网权限:android.permission.INTERNET

4.异常处理方式:

//若出现此种异常,
W/System.err(5504): android.os.NetworkOnMainThreadException
W/System.err(5504): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1148)//在oncreate方法中加入StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy);

5.ScrollView(滚动条):使用注意:只能有一个孩子

二、消息机制的写法

1.如果在主线程中进行了耗时的操作(比如连接网络,拷贝数大的数据)。

2.避免出现anr异常可将耗时操作放置子线程中,自己创建一个线程。

3.4.0之后谷歌强制要求连接网络不能再主线程进行访问

4.只有主线程才可以更新ui

三、Handler原理

handler使用步骤:

1.在主线程定义一个Handler:private Handler handler = new Handler();

2.使用handler会重写Handler里面的handleMessage方法:public void handleMessage(android.os.Message msg) {};

3.拿着我们在主线程创建的Handler 去子线程发消息:handler.sendMessage(msg); 

4.handleMessage方法就会执行,在这个方法里面去更新ui

handler作用:用来发消息和处理消息

looper作用:是去消息队列里面取消息,Looper是在主线程一创建,looper就有了。

 网站源码查看器示例代码:

public class MainActivity extends Activity {protected static final int REQUESTSUCCESS = 0;  //变大写ctrl+shift+X   变小写写ctrl+shift+Y protected static final int REQUESTFAILED= 1; protected static final int REQUESTEXCEPTION = 2;private EditText et_path;private TextView tv_result;//在主线程中定义一个Handlerprivate Handler handler = new Handler(){//此方法在主线程中执行public void handleMessage(android.os.Message msg) {//所以可在主线程更新uiswitch (msg.what) {case REQUESTSUCCESS:String content = (String) msg.obj;tv_result.setText(content);break;case REQUESTFAILED:Toast.makeText(getApplicationContext(), "请求资源不存在", Toast.LENGTH_LONG).show();break;case REQUESTEXCEPTION:Toast.makeText(getApplicationContext(), "服务器忙,请稍后再访问...", Toast.LENGTH_LONG).show();break;default:break;}};};@SuppressLint("NewApi") @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_path = (EditText) findViewById(R.id.et_path);tv_result = (TextView) findViewById(R.id.tv_result);
//        StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
//        StrictMode.setThreadPolicy(policy);System.out.println("当前线程的名称:"+Thread.currentThread().getName());}// 点击按钮查看,获取指定路径的源码public void click(View v) {// 2.0创建一个子线程new Thread() {public void run() {try {// 2.1获取源码路径String path = et_path.getText().toString().trim();// 2.2创建url对象,指定我们要访问的网址(路径)URL url = new URL(path);// 2.3拿到HttpURLConnection对象,用于发送或接收数据HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();// 2.4设置发送get请求urlConnection.setRequestMethod("GET");// get要求大写,默认为get请求// 2.5设置请求的超时时间urlConnection.setConnectTimeout(5000);// 2.6获取服务器返回的状态码 200请求成功int code = urlConnection.getResponseCode();if (code == 200) {// 2.7获取服务器返回的数据,以流的形式返回InputStream inputStream = urlConnection.getInputStream();String content = StreamTools.readStream(inputStream);// 2.8.0创建Message对象Message msg = new Message();msg.what = REQUESTSUCCESS;msg.obj = content;// 2.8.1拿着我们创建的Handler助手,告诉系统,我们需要更新uihandler.sendMessage(msg); // 发了一条消息,把消息放到msg里,handlerMessage方法执行// 2.8将流的数据展示到TextView// tv_result.setText(content);} else {// 请求资源不存在 Toast是一个view 也不能在子线程更新uiMessage msg = new Message();msg.what = REQUESTFAILED; // 代表哪条消息
                        handler.sendMessage(msg);}} catch (Exception e) {Message msg = new Message();msg.what = REQUESTEXCEPTION; // 代表哪条消息
                    handler.sendMessage(msg);e.printStackTrace();}}}.start();}}public class StreamTools {//把一个InputStream 转换成Stringpublic static String readStream(InputStream in) throws Exception{//定义一个内存输出流ByteArrayOutputStream baos = new ByteArrayOutputStream();int len = -1;byte[] buffer = new byte[1024]; //1kbwhile((len = in.read(buffer))!= -1){baos.write(buffer, 0, len);}in.close();String content = new String(baos.toByteArray());return content;}
}
View Code

图片查看器(图片缓存)

1.把流信息转换为bitmap对象:

2.bitmapFactory.decodeStream(InputStream in);

3.加上网络访问权限:android.permission.INTERNET

public class MainActivity extends Activity {private EditText et_path;private ImageView iv;@SuppressLint("NewApi") @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_path = (EditText) findViewById(R.id.et_path);iv = (ImageView) findViewById(R.id.iv);}private Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {Bitmap bitmap = (Bitmap) msg.obj;iv.setImageBitmap(bitmap);};};// 点击按钮查看,获取指定路径的源码public void click(View v) {new Thread(){public void run(){try {String path = et_path.getText().toString().trim();//Base64.encodeToString(path.getBytes(), Base64.DEFAULT) 图片的文件名加密File file = new File(getCacheDir(),Base64.encodeToString(path.getBytes(), Base64.DEFAULT));//File file = new File(getCacheDir(),"test.png");if(file.exists() && file.length()>0){//使用缓存缓存的图片System.out.println("使用缓存图片");Bitmap cacheBitmap = BitmapFactory.decodeFile(file.getAbsolutePath());Message msg = Message.obtain(); //使用Message的静态方法可以减少对象的创建msg.obj = cacheBitmap;handler.sendMessage(msg);}else{//第一次访问,联网获取数据System.out.println("第一次联网获取数据");//2.1获取访问图片的路径//String path = et_path.getText().toString().trim();//创建url对象URL url  = new URL(path);HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();//2.4设置请求的方式urlConnection.setRequestMethod("GET");//2.5设置超时时间urlConnection.setConnectTimeout(50000);//2.6获取服务器返回的状态码int code = urlConnection.getResponseCode();if(code == 200){//2.7获取图片的数据,不管什么数据(txt,图片文本)都是以流的形式返回InputStream inputStream = urlConnection.getInputStream();//2.7.1缓存图片 谷歌给我们提供了一个缓存目录FileOutputStream fos = new FileOutputStream(file);int len = -1;byte[] buffer = new byte[1024];//1kbwhile((len=inputStream.read(buffer))!=-1){fos.write(buffer, 0, len);}fos.close();inputStream.close();//2.8通过位图工厂获取bitmapBitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());//2.9把bitmap显示到iv上Message msg = Message.obtain(); //使用Message的静态方法可以减少对象的创建msg.obj = bitmap;handler.sendMessage(msg);//iv.setImageBitmap(bitmap);
                        }}} catch (Exception e) {e.printStackTrace();}    };}.start();}}
View Code

四、runOnUiThread使用说明

1.如果仅是更新ui,则使用runOnUiThread可以。

2.可以通过handler发消息携带数据,必须用handler。

   //不管在什么位置上调用action都运行在ui线程runOnUiThread(new Runnable() {//run方法一定执行在ui线程
        @Overridepublic void run() {// iv.setImageBitmap(bitmap);}});

 

注:此文为网站视频内容,本人在学习中,记录便于自己复习。

转载于:https://www.cnblogs.com/wjh123/p/5932646.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_734491.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大学四年一直自学,作为程序员的他,这次把私藏的学习网站都贡献出来了

如何在大学高效地进行学习?这是需要大家去思考的问题。学习网站也好,实用工具也好,基础前提是你知道如何去学习它,并且能在无人监督的条件下花足够的时间学习它。 为了助力大家的学习,我把这些年私藏的各种网站资源全…

大学四年,靠着这些学习网站,我从挂科学渣变成了别人眼中的大神

前记 毕业合影时,导员笑着对我说“你可是我们系里的风云人物”。我也笑了,思绪却回到了四年前。 还记得四年前,我从小县城里走出,来到学校的计算机学院报到,开始面对更大世界。一段时间之后,我见识到同学…

用百度地图做自定义图层_白杨SEO:企业商家怎么做百度地图标注、优化排名、推广引流和营销?【实操方法】...

原创:白杨 全文2500字 预计阅读5分钟前言:这是白杨SEO公众号原创第169篇。之前SEO好友王海写了一篇高地图标注方法(文尾),所以今天我来写一篇百度地图标注实操的。如果觉得有帮助,点在看或分享给需要朋友。大纲如下:1、…

如何用python爬取图片数据_Python3.6爬虫入门练手小项目之一:使用爬虫爬取糗事百科网站图片项目...

1.步骤解析 这个小项目的目的是让大家学会如何爬取网站上的图片,下面是简单介绍。 实现步骤如下: 1.首先要写最简单的代码,确定能通过url访问糗百 2.将糗百服务器返回的数据进行解码,得到完整HTML代码 3.查看糗百HTML代码&#xf…

网站导航颜色停留_关乎网站用户体验的10个关键要素,用好了事半功倍!

互联网时代,几乎每个稍微成型的企业都有自己在网络上的窗口——企业网站。企业网站能否在极短时间内抓住用户眼球,增加用户停留时间,让用户找出兴趣点,进而发起在线咨询,最终形成转化,达到企业网站最终提升…

如何避免网站收录低和收录周期长

无论是新站还是旧站都会遇到网站收录低或者收录周期长的问题,那么该如何去解决这一问题呢?下面咱们聊一聊对网站的一些建议。 一、内容重复度高  很多使用采集工具或者转载他人文章来更新内容,这样的内容重复度非常高,严重影响用户体验&am…

Kali linux 2016.2(Rolling)中metasploit的搜集特定网站的目录结构

parent directory site: testfire.net可以看到,在这个testfire.NET中存在有几个隐藏目录(返回代码403:没有权限访问)。 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/68702…

手把手教学使用Halo搭建自己的博客网站

工作需要学习,学习需要积累。网上有很多好的博客系统。我们可以去"CSDN","博客园"等这种大厂提供的博客空间,也可以自己搭建高逼格的独立博客。例如,适合github的hexo,大众的wordpress&#xff0c…

https改为http访问_网站更改为https后,数据统计不到了

http协议网站更改为https后,很多数据统计不到了。是很多SEO和运营人员会遇到的比较严重的问题,数据渠道计入不准确,那很多的考核就没办继续。该怎么办呢?https协议对比http协议而言,针对于我们的网站来说会更加的安全。…

Hive(27):分析网站uvpv等多指标综合案例

一、实现功能 1.分析网站日志,获得日期,uv,pv,登录人数,游客人数,平均访问时长,二跳率,独立ip数等关键信息。 其中: 登录:userid有值,会员&…

(转)程序员实用工具网站

【原文地址:https://blog.csdn.net/m0_38106923/article/details/100130354】 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/m0_3810…

Loadrunner12 - WebTours网站使用录制回放时错误(2)——Session自动关联问题

当你发现你录制回放完成webTours后loadrunner12提示你脚本通过,但实际webTours中并没有发生任何实际的变化时,那可能就是session关联的问题了。 首先,我们重新录制,录制完成后,LR自动扫描可能存在的关联,LR…

宝塔自动备份网站到FTP空间

上次分享了宝塔自动备份网站到阿里云oss中,但是阿里云的oss是要收存储费用的,而且我非常在意的一点就是这样会把阿里云的API密码明文存储在面板后台,感觉这样也不太好,就一直在想其他的自动备份方案,正好前几天腾讯云活…

经营10多年的科技网站月光博客每月可以赚多少钱?[图]

2019独角兽企业重金招聘Python工程师标准>>> 经营10多年的科技网站月光博客每月可以赚多少钱? 相信你也想知道这个问题吧,我反正是充满了好奇。月光博客是十多年前就已经崛起的一个优秀博客,主打科技主题,曾经引得很多…

JSP——实现简单的计数器(统计访问网站的次数)

1.index.jsp文件 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <html> <body> <%! int i0; //成员变量 %> <% i; //Java程序片 %&g…

简洁精美的企业单页门户网站(纯静态模板)

为什么80%的码农都做不了架构师&#xff1f;>>> <!DOCTYPE html> <html lang"en" class"no-js"> <!-- BEGIN HEAD --> <head> <meta charset"utf-8"/> <title>钦州日之新科技有限公司</titl…

在官方网站获得JMeter工具的步骤

首先我们了解一下JMeter是什么&#xff0c;以下是百度百科对于JMeter的解释说明。 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资…

做SEO需要掌握哪些核心技术

每一个像我咨询SEO培训的学员都问同一个问题&#xff0c;做SEO需要掌握哪些技术&#xff0c;SEO分为专职SEO跟兼职SEO&#xff0c;无技术也能做SEO&#xff0c;我认为掌握更多的技术是提高SEO的基本。做SEO优化不像做数学加减法&#xff0c;更像是文章写作&#xff0c;没有固定…

nginx 1.18 没有sbin文件夹_提升网站安全性隐藏nginx信息

一般使用nginx的web网站&#xff0c;访问网站时&#xff0c;可以从请求头中看到使用了nginx以及nginx的版本号。暴露这些信息将给网站带来一定的风险&#xff0c;因此安装nginx时最好把这些信息隐藏。隐藏nginx 版本号与WEB服务器信息如果未安装nginx&#xff0c;先去官网下载压…

新手前端练手网站_影视后期新手大礼包

点击上方蓝色字关注我们~为什么很多人学习影视后期学不下去&#xff1f;为什么很多人学习影视后期不知道是为了什么&#xff1f;无论是工作需要&#xff0c;或者兴趣爱好&#xff0c;又或者转行设计。还在迷茫的你&#xff0c;请认真看完下面的视频&#xff0c;会对你有十分大的…