Android实现输入一个网址,就可以看百度图片美女,是不是很心动?
总共分三步:
1.从输入框中获取图片文件路径,在主线程中创建消息处理器,发送http请求: url.openConnection();
2.在创建的子线程中 连接服务器get获取图片;
3.在主线程中捕获从子线程 handler.sendMessage(msg)发送回来的消息msg,并解析图片数据,更新使用setImageBitmap()方法更新UI。
废话少说,直接上代码:
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
protected static final int CHANGE_UI = 1; //帮我改UI
protected static final int ERROR = 2;
private EditText et_path;
private ImageView iView;
//第一步:在主线程中创建消息处理器
private Handler handler=new Handler(){
/*
* (non-Javadoc)第三步: looper 获得 子线程传过来的消息进行 UI更新
* @see android.os.Handler#handleMessage(android.os.Message)
*/
public void handleMessage(android.os.Message msg) {  //重写handlemessage方法
if (msg.what==CHANGE_UI) {
Bitmap bitmap= (Bitmap)msg.obj;
iView.setImageBitmap(bitmap);
}
else if (msg.what==ERROR) {
Toast.makeText(MainActivity.this,"获取图片失败", 0).show();
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path=(EditText)findViewById(R.id.et);
iView=(ImageView)findViewById(R.id.iv);
}
/*
* Android2.X直接在主线程中获取服务器数据,这样如果朋多多任务,主线程就会崩溃 4.0之后舍弃此方法
*/
//public void onClick(View view) {
// String path=et_path.getText().toString().trim(); //获取文件路径
// if (TextUtils.isEmpty(path)) {
// Toast.makeText(MainActivity.this,"图片路径不能为空", 0).show();
// } else {
// //连接服务器get获取图片
// try {
// URL url=new URL(path); //包装路径
// HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection(); //根据url发送http请求
// urlConnection.setRequestMethod("GET"); //指定获取图片的方式——get方式
// urlConnection.setConnectTimeout(5000); //5000毫秒相当于5秒
// int code=urlConnection.getResponseCode(); //得到服务器返回的响应码
// if (code==200) {  //200代表获取成功    404代表获取失败
// InputStream iStream=urlConnection.getInputStream();
// Bitmap bitmap=BitmapFactory.decodeStream(iStream); //位图方法——把流转换为Bitmap
// iView.setImageBitmap(bitmap); //显示bitmap
// }else {
// Toast.makeText(MainActivity.this, "显示图片失败", 0).show();
// }
// } catch (Exception e) {
// e.printStackTrace();
// Toast.makeText(MainActivity.this, "获取图片失败", 0).show();
// }
// }
//}
//  
/*
* Android4.0之后 改进版,新开辟子线程,在子线程中访问服务器获取数据
*/
public void onClick(View view) {
     final String  path=et_path.getText().toString().trim(); //获取文件路径
if (TextUtils.isEmpty(path)) {
Toast.makeText(MainActivity.this,"图片路径不能为空", 0).show();
} else {
new Thread(){
public void run() {
//连接服务器get获取图片
try {
URL url=new URL( path); //包装路径    注意:内部类访问外部类,变量要加final
HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection(); //根据url发送http请求
           urlConnection.setRequestMethod("GET"); //指定获取图片的方式——get方式
urlConnection.setConnectTimeout(5000); //5000毫秒相当于5秒
    int code=urlConnection.getResponseCode(); //得到服务器返回的响应码
  if (code==200) {  //200代表获取成功    404代表获取失败
            InputStream iStream=urlConnection.getInputStream();
            Bitmap bitmap=BitmapFactory.decodeStream(iStream); //位图方法——把流转换为Bitmap
//iView.setImageBitmap(bitmap); //显示bitmap
/*
* 第二步:子线程告诉主线程一个消息,帮我更改UI,内容bitmap
*/
     Message msg=new Message();
            msg.what=CHANGE_UI; //在开头定义CHANGE_UI的宏
            msg.obj=bitmap;     //obj代表消息里面的数据
            handler.sendMessage(msg);
}else {
//         Toast.makeText(MainActivity.this, "显示图片失败", 0).show();
Message msg=new Message();
msg.what=ERROR; //在开头定义CHANGE_UI的宏
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
Message msg=new Message();
msg.what=ERROR; //在开头定义CHANGE_UI的宏
handler.sendMessage(msg);
//Toast.makeText(MainActivity.this, "获取图片失败", 0).show();
}
}
}.start();
}
}
}
最终效果图:

Android实现网络图片app相关推荐

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

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

  2. android获取网络图片

    2019独角兽企业重金招聘Python工程师标准>>> 资源描述: 关于android获取网络图片主要是把网络图片的数据流读入到内存中然后用 1.Bitmap bitMap = Bi ...

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

    在做项目中,获取网络数据是一件很常见的事情,各类数据在服务器端或直接print,或封以实体类扔进List转换为json,由客户端使用HttpClient的execute()方法接收,以完成数据交互的过 ...

  4. Android 电影排行榜app制作(可加入观看清单保存)

    Android 电影排行榜app制作(可加入观看清单保存) 第一步:在xml文件上进行主界面的布局 采用LinearLayout布局,添加ImageView控件(电影小图标)实现跳转到观看清单的页面, ...

  5. android 图片浏览器 布局,Android实现网络图片浏览器

    本文实例为大家分享了Android网络图片浏览器的制作过程,供大家参考,具体内容如下 一.创建一个"网络图片浏览器的应用程序",并设计用户交互界面,"网络图片浏览器&qu ...

  6. Android如何更新app的版本(中级)

    Android如何更新app的版本(中级) 版本更新 看看我们要用到哪些技术1 自定义通知栏 2 HTTP 下载 3 AsyncTask 4 刷新通知栏中的进度条 5 执行 apk安装的隐士意图 6 ...

  7. 【Android】 01. APP 进程启动和 ActivityThread 的关系

    2019独角兽企业重金招聘Python工程师标准>>> 首先我们应该知道2个概念: 我们应该知道在Android中一个app就是一个进程: 我们在普通的Java程序中一个程序的入口是 ...

  8. Android Jetpack组件App Startup简析

    1.前言 最近简单看了下google推出的框架Jetpack,感觉此框架的内容可以对平时的开发有很大的帮助,也可以解决很多开发中的问题,对代码的逻辑和UI界面实现深层解耦,打造数据驱动型UI界面. A ...

  9. Program type already present: android.support.v4.app.BackStackRecord$Op

    Program type already present: android.support.v4.app.BackStackRecord$Op 原文:https://blog.csdn.net/zww ...

最新文章

  1. 二分图-匈牙利算法模板
  2. Java: System.exit() 与安全策略
  3. 2021-04-14 Matlab实现模糊聚类分析 FCM
  4. mysql索引与约束有什么关系_MySQL 约束与索引
  5. 笔算除法 c语言,《两、三位数除以一位数,笔算》
  6. DSP 28335中GPIO配置
  7. 8-Python3从入门到实战—基础之数据类型(集合-Sets)
  8. 利用python处理中国地面气候资料日值数据集(V3.0)
  9. 服务器被黑 追寻ip_我的服务器被打死,源IP暴露怎么办补救
  10. Nginx学习之一-第一个程序Hello World
  11. C语言关键字必备练习题
  12. 监视Python程式自动退出,并重新启动程式
  13. wampserver图标为绿色,打开localhost页面错误提示:The requested URL / was not found on this server
  14. 《算法笔记》2.3小节——C/C++快速入门-选择结构
  15. linux插网卡不能识别,linux-解决添加的网卡无法识别的问题
  16. TNW:Tumblr博文已超200亿
  17. 面向过程与面向对象的区别
  18. vue实现通过手机号发送短信验证码登录
  19. CSS垂直居中和水平居中
  20. ES 按照每隔几分钟,几小时,几天统计折线图

热门文章

  1. 关于BigDecimal.ROUND_HALF_UP与ROUND_HALF_DOWN
  2. datagrip连接sqlserve发生[08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
  3. 建文高考成绩查询2021,建文外国语学校新书《高中阅读一卡通》出版
  4. keil startup_stm32f10x_hd.s编译报错
  5. 数据链路层的基本功能简单总结
  6. 游戏设计:何为游戏框架
  7. ssh导出数据库的数据到Excel表格
  8. 那些以玩笑说出口的话,往往是最真的表达
  9. 【jzoj4826】【小澳的葫芦】【二分答案】
  10. 例2-22 正弦信号的微分运算和积分运算