Android 网络图片浏览器( ImageView )【网络访问、线程、handler(消息处理器)、Internet权限、Get请求、输入流转图片】
源码 [工程文件]:https://gitee.com/lwx001/ImageView
目 录
运行截图
activity_main.xml
MainActivity.java
AndroidManifest.xml
运行截图
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"tools:context=".MainActivity"><LinearLayoutandroid:id="@+id/ll_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:layout_marginBottom="5dp"android:orientation="horizontal"><EditTextandroid:id="@+id/et_path"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginRight="3dp"android:layout_weight="1"android:background="#EBEBEB"android:hint="请输入图片路径"android:inputType="textUri"android:paddingLeft="3dp"android:textColor="#696969"android:textSize="20sp" /><Buttonandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="4"android:background="#EBEBEB"android:onClick="click"android:text="浏览"android:textColor="#696969"android:textSize="20sp" /></LinearLayout><ImageViewandroid:id="@+id/iv_pic"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@+id/ll_text"android:scaleType="centerCrop" />
</RelativeLayout>
MainActivity.java
package cn.lwx.imageview;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;public class MainActivity extends AppCompatActivity {protected static final int CHANGE_UI = 1;protected static final int ERROR = 2;private EditText et_path;private ImageView ivPic;private Handler handler = new Handler() { // 主线程创建消息处理器@Overridepublic void handleMessage(android.os.Message msg) {if (msg.what == CHANGE_UI) {Bitmap bitmap = (Bitmap) msg.obj;ivPic.setImageBitmap(bitmap);} else if (msg.what == ERROR) {Toast.makeText(MainActivity.this, "显示图片错误 !", Toast.LENGTH_SHORT).show();}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_path = (EditText) findViewById(R.id.et_path);ivPic = (ImageView) findViewById(R.id.iv_pic);//et_path.setText("http://www.photophoto.cn/m6/018/030/0180300388.jpg");//et_path.setText("图片地址!!!");//https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=2834084951,2081126851&fm=11&gp=0.jpg}public void click(View view) {final String path = et_path.getText().toString().trim();if (TextUtils.isEmpty(path)) { //判断是否为空串Toast.makeText(this, "图片路径不能为空 !", Toast.LENGTH_SHORT).show();} else {//子线程请求网络,Android4.0以后访问网络不能放在主线程中new Thread() { //开启一个线程private HttpURLConnection conn;private Bitmap bitmap;public void run() { //联网操作// 连接服务器 get 请求 获取图片try {// 创建URL对象URL url = new URL(path);// 根据url, 发送http的请求conn = (HttpURLConnection) url.openConnection();// 设置请求的方式conn.setRequestMethod("GET");// 设置超时时间conn.setConnectTimeout(5000);// 得到服务器返回的响应码int code = conn.getResponseCode();// 请求网络成功后, 返回码是200if (code == 200) {//获取输入流InputStream is = conn.getInputStream();//将流转换成Bitmap对象bitmap = BitmapFactory.decodeStream(is);//强制规定:必须在主线程中 更改图片//将更改主界面的消息发送给主线程Message msg = new Message();msg.what = CHANGE_UI;//int型常量,区分不同的消息msg.obj = bitmap;//通过消息携带对应的图片(object类型)handler.sendMessage(msg);//发送消息} else {//返回码不等于200 请求服务器失败Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}//关闭连接conn.disconnect();}}.start();}}}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="cn.lwx.imageview"><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
为善者,福虽未至,祸已远离~ 嘻嘻(●'◡'●)
Android 网络图片浏览器( ImageView )【网络访问、线程、handler(消息处理器)、Internet权限、Get请求、输入流转图片】相关推荐
- android端的的网络访问
一.Android端进行网络访问的几种实现方式 Socket 套接字,为TCP/IP协议网络通信的网络操作单元: 而抽象上来说:Socket只是一个供上层调用的抽象接口,相当于是传输层下的数据,还没经 ...
- Android MediaPlayer使用之网络访问异常
Android MediaPlayer使用之网络访问异常 1.问题描述 2019-04-02 21:26:15.552 22138-22138/com.uyeh.mediaplayertest D/M ...
- android 图片浏览器 布局,Android实现网络图片浏览器
本文实例为大家分享了Android网络图片浏览器的制作过程,供大家参考,具体内容如下 一.创建一个"网络图片浏览器的应用程序",并设计用户交互界面,"网络图片浏览器&qu ...
- Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...
- Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现NetM ...
- 关于AndroidStudio声明了网络访问权限却无法访问网络的问题
参考书目<第一行代码>第二版 AndroidStudio版本:3.5.2 SDK版本:Android9.0 在尝试访问网络时使用Okhttp(4.1.0)代码如下: private voi ...
- Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51448597 项目源码(打赏5积分请点这边):http://download.csdn ...
- mongoengine中queryset触发网络访问机制剖析
背景 最近新上线的一个服务,偶尔会有超时告警,其主要逻辑仅仅只是简单的读/写mongodb,而且服务上线初期,流量并不大,因而理论上来说,每次请求都应该很快才对,事实上分析日志也证实90%以上的请求都 ...
- Android笔记 消息机制handler+http之 网络图片浏览器demo
在Android中,只有主线程(UI线程)才能修改界面,包括Toast显示,改变Imageview中的图片等操作必须通过消息机制通知主线程修改界面 如不采用handler消息机制极有可能出现如下错误 ...
最新文章
- 坚持写博客给我带来了什么
- 机器学习算法源码全解析(三)-范数规则化之核范数与规则项参数选择
- eclipse启动tomcat错误:A Java Exception has occurred(转)
- [慕课笔记] node+mongodb建站攻略
- android 自定义推流器,Android直播实现 Android端推流、播放
- base64解密后乱码_php实现php代码的加密解密
- 德施曼|618期间五次霸榜 直击智能锁第一爆品德施曼Q5
- 如何在Python中串联两个列表?
- 面向对象软件设计原则
- linux复制远程文件和文件夹
- [kuangbin带你飞] 专题一 简单搜索 题解(超详细注释,史上最强题解)
- SCT2650,4.5V-60V电压,芯洲降压DCDC转换器,参数
- 华为mate7 刷机出现android,华为Mate7怎么刷机 华为Mate7刷机教程【步骤详解】
- 3D模型实现「唱、跳、Rap、篮球」
- 【网络安全】如何使用OpenSSL工具生成根证书与应用证书
- KingbaseES V8R6 集群运维系列 -- 命令行部署repmgr管理集群+switchover测试
- 蛋花花谈大学生如何在互联网上赚钱
- Linux---笔记总结
- Polar SC的C++实现
- 信号与系统2-连续离散系统时域分析
热门文章
- [设计模式笔记]4.建造者模式
- mysql error 1231_解决ERROR 1231 (42000): Variable 'time_zone' can't
- native react 图片多选_开源一个图片组件 react-native-border-radius-image
- android 上下滚动文字_android高仿今日头条富文本编辑(发布文章)
- 七十五、React环境搭建,目录文件分析和JSX
- 二十五、深入Java中的static静态修饰符
- 用kali的Meterpreter控制win10,可以偷看你的电脑的所有数据
- keras从入门到放弃(十七)使用预训练网络VGG迁移学习
- 人工神经网络发现生物神经网络,智源超高清电镜图像分割挑战赛开赛
- 5G时代,如何让人工智能服务人类而不是开除人类