网络编程是Android应用中很重要的一部分,本文主要讲述了利用HttpURLConnection获取网络图片和HTML的方法。

获取网络图片

public class MainActivity extends Activity implements OnClickListener {private static final String TAG = "MainActivity";protected static final int ERROR = 1;private EditText etUrl;private ImageView ivIcon;private final int SUCCESS = 0;private Handler handler = new Handler() {/*** 接收消息*/@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Log.i(TAG, "what = " + msg.what);if(msg.what == SUCCESS) {   // 当前是访问网络, 去显示图片ivIcon.setImageBitmap((Bitmap) msg.obj);        // 设置imageView显示的图片} else if(msg.what == ERROR) {Toast.makeText(MainActivity.this, "抓去失败", 0).show();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ivIcon = (ImageView) findViewById(R.id.iv_icon);etUrl = (EditText) findViewById(R.id.et_url);findViewById(R.id.btn_submit).setOnClickListener(this);}@Overridepublic void onClick(View v) {final String url = etUrl.getText().toString();new Thread(new Runnable() {@Overridepublic void run() {Bitmap bitmap = getImageFromNet(url);//              ivIcon.setImageBitmap(bitmap);      // 设置imageView显示的图片if(bitmap != null) {Message msg = new Message();msg.what = SUCCESS;msg.obj = bitmap;handler.sendMessage(msg);} else {Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}).start();}/*** 根据url连接取网络抓去图片返回* @param url* @return url对应的图片*/private Bitmap getImageFromNet(String url) {HttpURLConnection conn = null;try {URL mURL = new URL(url);    // 创建一个url对象// 得到http的连接对象conn = (HttpURLConnection) mURL.openConnection();conn.setRequestMethod("GET");       // 设置请求方法为Getconn.setConnectTimeout(10000);      // 设置连接服务器的超时时间, 如果超过10秒钟, 没有连接成功, 会抛异常conn.setReadTimeout(5000);      // 设置读取数据时超时时间, 如果超过5秒, 抛异常conn.connect();     // 开始链接int responseCode = conn.getResponseCode(); // 得到服务器的响应码if(responseCode == 200) {// 访问成功InputStream is = conn.getInputStream(); // 获得服务器返回的流数据Bitmap bitmap = BitmapFactory.decodeStream(is); // 根据 流数据 创建一个bitmap位图对象return bitmap;} else {Log.i(TAG, "访问失败: responseCode = " + responseCode);}} catch (Exception e) {e.printStackTrace();} finally {if(conn != null) {conn.disconnect();      // 断开连接}}return null;}
}

不能子线程中改变主线程页面,故需要使用Handler

上面的方法较为烦琐,使用github上的开源库,android-smart-image-view可以有效的实现相同的功能,同时简化操作,使用方法是将开源库src文件夹下的内容复制一份到工程中,同时在布局文件中,使用全类名使用自定义控件SmartImageView即可.

android-smart-image-view实现

public class MainActivity2 extends Activity implements OnClickListener {private EditText etUrl;private SmartImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);etUrl = (EditText) findViewById(R.id.et_url);mImageView = (SmartImageView) findViewById(R.id.iv_icon);findViewById(R.id.btn_submit).setOnClickListener(this);}@Overridepublic void onClick(View v) {// 1. 取出url, 抓取图片String url = etUrl.getText().toString();mImageView.setImageUrl(url);}
}

查看网页HTML实现

public class MainActivity extends Activity {private static final String TAG = "MainActivity";private static final int SUCCESS = 0;protected static final int ERROR = 1;private EditText etUrl;private TextView tvHtml;private Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case SUCCESS:tvHtml.setText((String) msg.obj);break;case ERROR:Toast.makeText(MainActivity.this, "访问失败", 0).show();break;default:break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etUrl = (EditText) findViewById(R.id.et_url);tvHtml = (TextView) findViewById(R.id.tv_html);}public void getHtml(View v) {final String url = etUrl.getText().toString();new Thread(new Runnable() {@Overridepublic void run() {// 请求网络String html = getHtmlFromInternet(url);if(!TextUtils.isEmpty(html)) {// 更新textview的显示了Message msg = new Message();msg.what = SUCCESS;msg.obj = html;handler.sendMessage(msg);} else {Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}).start();}/*** 根据给定的url访问网络, 抓去html代码* @param url* @return*/protected String getHtmlFromInternet(String url) {try {URL mURL = new URL(url);HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(10000);conn.setReadTimeout(5000);//          conn.connect();int responseCode = conn.getResponseCode();if(responseCode == 200) {InputStream is = conn.getInputStream();String html = getStringFromInputStream(is);return html;} else {Log.i(TAG, "访问失败: " + responseCode);}} catch (Exception e) {e.printStackTrace();}return null;}/*** 根据流返回一个字符串信息* @param is* @return* @throws IOException */private String getStringFromInputStream(InputStream is) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = -1;while((len = is.read(buffer)) != -1) {baos.write(buffer, 0, len);}is.close();String html = baos.toString();  // 把流中的数据转换成字符串, 采用的编码是: utf-8String charset = "utf-8";if(html.contains("gbk") || html.contains("gb2312")|| html.contains("GBK") || html.contains("GB2312")) {       // 如果包含gbk, gb2312编码, 就采用gbk编码进行对字符串编码charset = "gbk";}html = new String(baos.toByteArray(), charset); // 对原有的字节数组进行使用处理后的编码名称进行编码baos.close();return html;}
}

使用这种方法HTML有时会产生乱码,解决方法如上

完成

Android之查看网络图片和网页HTML相关推荐

  1. Android之使用HttpURLConnection类查看网络图片以及网络源码

    1.首先,来介绍一下HttpURLConnection类,HttpURLConnection类位于java.net包中,用于发送HTTP请求和获取HTTP响应.由于此类是抽象类,不能直接实例化对象,所 ...

  2. android 点击网络图片大全,android查看网络图片的实现方法

    本文实例为大家分享了android查看网络图片的具体代码,供大家参考,具体内容如下 需求描述: 输入一个 图片地址,下载到本地 展示. 效果展示 代码清单 MainActivity.java pack ...

  3. Android学习之查看网络图片

    在这里小编学习了查看网络图片的小案例,: 初始界面: 点击浏览后,效果如下: 需要注意的是 该案例需要获取联网权限,即: <uses-permission android:name=" ...

  4. android studio查看字节码,使用Android studio查看Kotlin的字节码教程

    Kotlin是一门JVM语言,它被google大力推广,现如今已经是Android官方推荐的开发语言了.为了更好的学习Kotlin,你必须要从字节码的角度来看待语法特点,这样可以更好的加深自己的理解. ...

  5. Android中获取网络图片的三种方法

    android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Application Not Responding)对话框的情况.对于这种情况,一般的方法就是耗时操作用 ...

  6. android图片浏览功能,怎么在Android应用中实现一个网页图片浏览功能

    怎么在Android应用中实现一个网页图片浏览功能 发布时间:2020-12-05 17:28:31 来源:亿速云 阅读:80 作者:Leah 本篇文章给大家分享的是有关怎么在Android应用中实现 ...

  7. android studio查看jar包源码,Android Studio查看源代码报错

    我们经常用Android Studio 查看Android的源代码,今天我们就来学习查看源代码的正确姿势. Android Studio查看源代码 我们用Android Studio查看源代码会遇到下 ...

  8. Android下查看共享库依赖项

    Android下查看共享库依赖项 [时间:2017-02] [状态:Open] [关键词:android,共享库依赖项,so,ndk,objdump,readelf] 起因 近期在处理Android下 ...

  9. 在Android中查看和管理sqlite数据库

    在Android中查看和管理sqlite数据库 在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看.android项目中的sqlite数据库 ...

最新文章

  1. 依赖注入@Autowired@Primary@Quelifier使用
  2. android studio使用问题——instant run
  3. 第二章:2.8 通过Django 在web页面上面输出 “Hello word ”
  4. 5G NR PUCCH资源配置
  5. 计算机桌面程序名,深度技术win7旗舰版电脑桌面图标只显示名称了怎么办
  6. “不管什么关系,只要提借钱,千万别借”你怎么看?
  7. cat6 万兆_CAT6、CAT6A超六类和CAT7七类网线哪个更适合10GBASE-T万兆网络
  8. iOS开发工程师求贤贴
  9. 更加精确的TCP Westwood拥塞控制算法
  10. 计算机入门在线阅读,计算机应用基础教程(Windows 7+Office 2010)
  11. Gluster分布式文件系统
  12. FrameExit:Conditional Early Exiting for Efficient Video Recognition
  13. OpenStack八大核心组件精讲之---swift
  14. [微信小程序]--关于获取当前时间的实现
  15. LeetCode312:戳气球
  16. JavaWeb实现注册登录功能并将用户数据写进数据库(商城系统第一部分)
  17. 火狐浏览器谷歌浏览器Edge浏览器修改默认UA(User-Agent)
  18. Qt QPlainTextEdit和QTextEdit区别
  19. Apifox 测试工具
  20. Python爬虫 scrapy框架爬取某招聘网存入mongodb解析

热门文章

  1. 2021 年 1 月程序员薪资出炉,持续上涨!你过平均线了吗?
  2. 吐槽贴:用ELECTRA、ALBERT之前,你真的了解它们吗?
  3. 阿里java架构师面试128题含答案:分布式架构+Dubbo+多线程+Redis
  4. 开源开放 | 计算机科学示意图问答数据集CSDQA(CCKS2021)
  5. TypeError: unhashable type: 'numpy.ndarray'
  6. 国科大高级人工智能3-DNN(BM/RBM/DBN/DBM)
  7. gin+vue的前后端分离开源项目
  8. 专享!解读抖音企业蓝V认证的详细流程是怎样的
  9. NOIP2007 树网的核
  10. git编译安装与常见问题解决